annotate dwtx/jface/action/CoolBarManager.d @ 192:c3583c6ec027

Added missing default cases for switch statements
author Frank Benoit <benoit@tionex.de>
date Mon, 03 Nov 2008 22:52:26 +0100
parents 04b47443bb01
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 /*******************************************************************************
90
7ffeace6c47f Update 3.4M7 to 3.4
Frank Benoit <benoit@tionex.de>
parents: 70
diff changeset
2 * Copyright (c) 2003, 2008 IBM Corporation and others.
25
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.CoolBarManager;
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.ToolBarContributionItem;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16 import dwtx.jface.action.Separator;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18 import dwtx.jface.action.ContributionManager;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19 import dwtx.jface.action.IContributionManager;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 import dwtx.jface.action.IContributionItem;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 import dwtx.jface.action.ICoolBarManager;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22 import dwtx.jface.action.IToolBarManager;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 import dwtx.jface.action.IMenuManager;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 import dwtx.jface.action.MenuManager;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import dwt.DWT;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 import dwt.widgets.Composite;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 import dwt.widgets.Control;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 import dwt.widgets.CoolBar;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 import dwt.widgets.CoolItem;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 import dwt.widgets.Menu;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 import dwtx.core.runtime.Assert;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 import dwtx.jface.util.Policy;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 import dwt.dwthelper.utils;
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
36 import dwtx.dwtxhelper.Collection;
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 import tango.io.Stdout;
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 cool 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 cool 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.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 * </p>
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 * @since 3.0
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 public class CoolBarManager : ContributionManager,
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 ICoolBarManager {
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
50 alias ContributionManager.add add;
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 * A separator created by the end user.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 public final static String USER_SEPARATOR = "UserSeparator"; //$NON-NLS-1$
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 * The original creation order of the contribution items.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 */
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
60 private ArrayList cbItemsCreationOrder;
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 * MenuManager for cool bar pop-up menu, or null if none.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 private MenuManager contextMenuManager = null;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 * The cool bar control; <code>null</code> before creation and after
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 * disposal.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 private CoolBar coolBar = null;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 * The cool bar items style; <code>DWT.NONE</code> by default.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 private int itemStyle = DWT.NONE;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 * Creates a new cool bar manager with the default style. Equivalent to
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 * <code>CoolBarManager(DWT.NONE)</code>.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 public this() {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
83 cbItemsCreationOrder = new ArrayList();
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 // do nothing
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 * Creates a cool bar manager for an existing cool bar control. This
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89 * manager becomes responsible for the control, and will dispose of it when
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 * the manager is disposed.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 * @param coolBar
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 * the cool bar control
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 public this(CoolBar coolBar) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 this();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 Assert.isNotNull(coolBar);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 this.coolBar = coolBar;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 itemStyle = coolBar.getStyle();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 * Creates a cool bar manager with the given DWT style. Calling <code>createControl</code>
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 * will create the cool bar control.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 * @param style
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107 * the cool bar item style; see
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 * {@link dwt.widgets.CoolBar CoolBar}for for valid
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 * style bits
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 public this(int style) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
112 cbItemsCreationOrder = new ArrayList();
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 itemStyle = style;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 /*
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 * (non-Javadoc)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 * @see dwtx.jface.action.ICoolBarManager#add(dwtx.jface.action.IToolBarManager)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121 public void add(IToolBarManager toolBarManager) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 Assert.isNotNull(cast(Object)toolBarManager);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 super.add(new ToolBarContributionItem(toolBarManager));
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127 * Collapses consecutive separators and removes a separator from the
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128 * beginning and end of the list.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130 * @param contributionList
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131 * the list of contributions; must not be <code>null</code>.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132 * @return The contribution list provided with extraneous separators
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133 * removed; this value is never <code>null</code>, but may be
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 * empty.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135 */
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
136 private ArrayList adjustContributionList(ArrayList contributionList) {
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137 IContributionItem item;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 // Fist remove a separator if it is the first element of the list
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139 if (contributionList.size() !is 0) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140 item = cast(IContributionItem) contributionList.get(0);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141 if (item.isSeparator()) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
142 contributionList.remove(0);
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
145 auto iterator = contributionList.listIterator();
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
146 // collapse consecutive separators
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
147 while (iterator.hasNext()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
148 item = cast(IContributionItem) iterator.next();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149 if (item.isSeparator()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
150 while (iterator.hasNext()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
151 item = cast(IContributionItem) iterator.next();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
152 if (item.isSeparator()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
153 iterator.remove();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
154 } else {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155 break;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
156 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
157 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
160 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161 // Now check last element to see if there is a separator
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 item = cast(IContributionItem) contributionList.get(contributionList
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163 .size() - 1);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164 if (item.isSeparator()) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
165 contributionList.remove(contributionList.size() - 1);
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168 return contributionList;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
172 /* (non-Javadoc)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
173 * @see dwtx.jface.action.ContributionManager#checkDuplication(dwtx.jface.action.IContributionItem)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
175 protected override bool allowItem(IContributionItem itemToAdd) {
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176 /* We will allow as many null entries as they like, though there should
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177 * be none.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
179 if (itemToAdd is null) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180 return true;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183 /* Null identifiers can be expected in generic contribution items.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185 String firstId = itemToAdd.getId();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
186 if (firstId is null) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
187 return true;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
189
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
190 // Cycle through the current list looking for duplicates.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
191 IContributionItem[] currentItems = getItems();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192 for (int i = 0; i < currentItems.length; i++) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193 IContributionItem currentItem = currentItems[i];
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
194
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
195 // We ignore null entries.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
196 if (currentItem is null) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197 continue;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
198 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
199
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
200 String secondId = currentItem.getId();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
201 if (firstId.equals(secondId)) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 if (Policy.TRACE_TOOLBAR) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
203 Stdout.formatln("Trying to add a duplicate item."); //$NON-NLS-1$
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
204 ExceptionPrintStackTrace(new Exception(null), Stdout );
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205 Stdout.formatln("DONE --------------------------"); //$NON-NLS-1$
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
206 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207 return false;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
209 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 return true;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
212 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
214 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
215 * Positions the list iterator to the end of all the separators. Calling
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
216 * <code>next()</code> the iterator should return the immediate object
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
217 * following the last separator.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
218 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
219 * @param iterator
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220 * the list iterator.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222 private void collapseSeparators(ListIterator iterator) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
223
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224 while (iterator.hasNext()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
225 IContributionItem item = cast(IContributionItem) iterator.next();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226 if (!item.isSeparator()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227 iterator.previous();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228 return;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
232
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234 * Returns whether the cool bar control has been created and not yet
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
235 * disposed.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
237 * @return <code>true</code> if the control has been created and not yet
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
238 * disposed, <code>false</code> otherwise
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
240 private bool coolBarExist() {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
241 return coolBar !is null && !coolBar.isDisposed();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
242 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
243
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
244 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245 * Creates and returns this manager's cool bar control. Does not create a
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
246 * new control if one already exists.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
248 * @param parent
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
249 * the parent control
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250 * @return the cool bar control
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252 public CoolBar createControl(Composite parent) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 Assert.isNotNull(parent);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254 if (!coolBarExist()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
255 coolBar = new CoolBar(parent, itemStyle);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256 coolBar.setMenu(getContextMenuControl());
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
257 coolBar.setLocked(false);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
258 update(false);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
259 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260 return coolBar;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
261 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
262
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
263 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
264 * Disposes of this cool bar manager and frees all allocated DWT resources.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
265 * Notifies all contribution items of the dispose. Note that this method
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
266 * does not clean up references between this cool bar manager and its
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267 * associated contribution items. Use <code>removeAll</code> for that
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
268 * purpose.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
269 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
270 public void dispose() {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
271 if (coolBarExist()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272 coolBar.dispose();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273 coolBar = null;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274 }
70
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
275 IContributionItem[] items = getItems();
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
276 for (int i = 0; i < items.length; i++) {
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
277 // Disposes of the contribution item.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
278 // If Contribution Item is a toolbar then it will dispose of
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
279 // all the nested
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
280 // contribution items.
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
281 items[i].dispose();
46a6e0e6ccd4 Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 43
diff changeset
282 }
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
283 // If a context menu existed then dispose of it.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
284 if (contextMenuManager !is null) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 contextMenuManager.dispose();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286 contextMenuManager = null;
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 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
291 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292 * Disposes the given cool item.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
293 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
294 * @param item
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
295 * the cool item to dispose
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
297 private void dispose(CoolItem item) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
298 if ((item !is null) && !item.isDisposed()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
299
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
300 item.setData(null);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301 Control control = item.getControl();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302 // if the control is already disposed, setting the coolitem
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
303 // control to null will cause an DWT exception, workaround
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
304 // for 19630
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
305 if ((control !is null) && !control.isDisposed()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
306 item.setControl(null);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
307 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
308 item.dispose();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
310 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
311
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
312 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
313 * Finds the cool item associated with the given contribution item.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
314 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
315 * @param item
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
316 * the contribution item
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
317 * @return the associated cool item, or <code>null</code> if not found
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
318 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
319 private CoolItem findCoolItem(IContributionItem item) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
320 CoolItem[] coolItems = (coolBar is null) ? null : coolBar.getItems();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
321 return findCoolItem(coolItems, item);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
322 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
323
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
324 private CoolItem findCoolItem(CoolItem[] items, IContributionItem item) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
325 if (items is null) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
326 return null;
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 for (int i = 0; i < items.length; i++) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
330 CoolItem coolItem = items[i];
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
331 IContributionItem data = cast(IContributionItem) coolItem.getData();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
332 if (data !is null && (cast(Object)data).opEquals(cast(Object)item)) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
333 return coolItem;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
334 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
335 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
336 return null;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
337 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
338
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
339 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
340 * Return a consistent set of wrap indices. The return value will always
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
341 * include at least one entry and the first entry will always be zero.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
342 * CoolBar.getWrapIndices() is inconsistent in whether or not it returns an
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
343 * index for the first row.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
344 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
345 * @param wraps
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
346 * the wrap indicies from the cool bar widget
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
347 * @return the adjusted wrap indicies.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
348 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
349 private int[] getAdjustedWrapIndices(int[] wraps) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
350 int[] adjustedWrapIndices;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
351 if (wraps.length is 0) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
352 adjustedWrapIndices = [ 0 ];
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
353 } else {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
354 if (wraps[0] !is 0) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
355 adjustedWrapIndices = new int[wraps.length + 1];
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
356 adjustedWrapIndices[0] = 0;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
357 for (int i = 0; i < wraps.length; i++) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
358 adjustedWrapIndices[i + 1] = wraps[i];
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
359 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
360 } else {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
361 adjustedWrapIndices = wraps;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
362 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
363 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
364 return adjustedWrapIndices;
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 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
368 * Returns the control of the Menu Manager. If the menu manager does not
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
369 * have a control then one is created.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
370 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
371 * @return menu control associated with manager, or null if none
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
372 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
373 private Menu getContextMenuControl() {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
374 if ((contextMenuManager !is null) && (coolBar !is null)) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
375 Menu menuWidget = contextMenuManager.getMenu();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
376 if ((menuWidget is null) || (menuWidget.isDisposed())) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
377 menuWidget = contextMenuManager.createContextMenu(coolBar);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
378 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
379 return menuWidget;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
380 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
381 return null;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
382 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
383
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
384 /*
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
385 * (non-Javadoc)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
386 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
387 * @see dwtx.jface.action.ICoolBarManager#isLayoutLocked()
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
388 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
389 public IMenuManager getContextMenuManager() {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
390 return contextMenuManager;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
391 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
392
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
393 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
394 * Returns the cool bar control for this manager.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
395 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
396 * @return the cool bar control, or <code>null</code> if none
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
397 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
398 public CoolBar getControl() {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
399 return coolBar;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
400 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
401
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
402 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
403 * Returns an array list of all the contribution items in the manager.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
404 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
405 * @return an array list of contribution items.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
406 */
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
407 private ArrayList getItemList() {
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
408 IContributionItem[] cbItems = getItems();
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
409 ArrayList list = new ArrayList(cbItems.length);
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
410 for (int i = 0; i < cbItems.length; i++) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
411 list.add( cast(Object) cbItems[i]);
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
412 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
413 return list;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
414 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
415
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
416 /*
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
417 * (non-Javadoc)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
418 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
419 * @see dwtx.jface.action.ICoolBarManager#isLayoutLocked()
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
420 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
421 public bool getLockLayout() {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
422 if (!coolBarExist()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
423 return false;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
424 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
425 return coolBar.getLocked();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
426 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
427
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
428 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
429 * Returns the number of rows that should be displayed visually.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
430 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
431 * @param items
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
432 * the array of contributin items
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
433 * @return the number of rows
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
434 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
435 private int getNumRows(IContributionItem[] items) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
436 int numRows = 1;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
437 bool separatorFound = false;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
438 for (int i = 0; i < items.length; i++) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
439 if (items[i].isSeparator()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
440 separatorFound = true;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
441 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
442 if ((separatorFound) && (items[i].isVisible())
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
443 && (!items[i].isGroupMarker()) && (!items[i].isSeparator())) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
444 numRows++;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
445 separatorFound = false;
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 return numRows;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
449 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
450
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
451 /*
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
452 * (non-Javadoc)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
453 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
454 * @see dwtx.jface.action.ICoolBarManager#getStyle()
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
455 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
456 public int getStyle() {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
457 return itemStyle;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
458 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
459
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
460 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
461 * Subclasses may extend this <code>ContributionManager</code> method,
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
462 * but must call <code>super.itemAdded</code>.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
463 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
464 * @see dwtx.jface.action.ContributionManager#itemAdded(dwtx.jface.action.IContributionItem)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
465 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
466 protected override void itemAdded(IContributionItem item) {
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
467 Assert.isNotNull(cast(Object)item);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
468 super.itemAdded(item);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
469 int insertedAt = indexOf(item);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
470 bool replaced = false;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
471 final int size = cbItemsCreationOrder.size();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
472 for (int i = 0; i < size; i++) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
473 IContributionItem created = cast(IContributionItem) cbItemsCreationOrder
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
474 .get(i);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
475 if (created.getId() !is null && created.getId().equals(item.getId())) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
476 cbItemsCreationOrder.set(i, cast(Object) item);
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
477 replaced = true;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
478 break;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
479 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
480 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
481
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
482 if (!replaced) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
483 cbItemsCreationOrder.add(Math.min(Math.max(insertedAt, 0),
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
484 cbItemsCreationOrder.size()), cast(Object) item);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
485 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
486 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
487
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
488 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
489 * Subclasses may extend this <code>ContributionManager</code> method,
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
490 * but must call <code>super.itemRemoved</code>.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
491 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
492 * @see dwtx.jface.action.ContributionManager#itemRemoved(dwtx.jface.action.IContributionItem)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
493 */
43
ea8ff534f622 Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
494 protected override void itemRemoved(IContributionItem item) {
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
495 Assert.isNotNull(cast(Object)item);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
496 super.itemRemoved(item);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
497 CoolItem coolItem = findCoolItem(item);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
498 if (coolItem !is null) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
499 coolItem.setData(null);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
500 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
501 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
502
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
503 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
504 * Positions the list iterator to the starting of the next row. By calling
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
505 * next on the returned iterator, it will return the first element of the
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
506 * next row.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
507 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
508 * @param iterator
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
509 * the list iterator of contribution items
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
510 * @param ignoreCurrentItem
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
511 * Whether the current item in the iterator should be considered
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
512 * (as well as subsequent items).
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
513 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
514 private void nextRow(ListIterator iterator, bool ignoreCurrentItem) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
515
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
516 IContributionItem currentElement = null;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
517 if (!ignoreCurrentItem && iterator.hasPrevious()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
518 currentElement = cast(IContributionItem) iterator.previous();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
519 iterator.next();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
520 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
521
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
522 if ((currentElement !is null) && (currentElement.isSeparator())) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
523 collapseSeparators(iterator);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
524 return;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
525 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
526
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
527 //Find next separator
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
528 while (iterator.hasNext()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
529 IContributionItem item = cast(IContributionItem) iterator.next();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
530 if (item.isSeparator()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
531 // we we find a separator, collapse any consecutive
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
532 // separators
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
533 // and return
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
534 collapseSeparators(iterator);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
535 return;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
536 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
537 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
538 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
539
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
540 /*
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
541 * Used for debuging. Prints all the items in the internal structures.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
542 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
543 // private void printContributions(ArrayList contributionList) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
544 // int index = 0;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
545 // System.out.println("----------------------------------\n"); //$NON-NLS-1$
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
546 // for (Iterator i = contributionList.iterator(); i.hasNext(); index++) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
547 // IContributionItem item = (IContributionItem) i.next();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
548 // if (item.isSeparator()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
549 // System.out.println("Separator"); //$NON-NLS-1$
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
550 // } else {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
551 // System.out.println(index + ". Item id: " + item.getId() //$NON-NLS-1$
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
552 // + " - is Visible: " //$NON-NLS-1$
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
553 // + item.isVisible());
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
554 // }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
555 // }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
556 // }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
557 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
558 * Synchronizes the visual order of the cool items in the control with this
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
559 * manager's internal data structures. This method should be called before
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
560 * requesting the order of the contribution items to ensure that the order
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
561 * is accurate.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
562 * <p>
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
563 * Note that <code>update()</code> and <code>refresh()</code> are
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
564 * converses: <code>update()</code> changes the visual order to match the
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
565 * internal structures, and <code>refresh</code> changes the internal
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
566 * structures to match the visual order.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
567 * </p>
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
568 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
569 public void refresh() {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
570 if (!coolBarExist()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
571 return;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
572 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
573
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
574 // Retreives the list of contribution items as an array list
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
575 auto contributionList = getItemList();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
576
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
577 // Check the size of the list
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
578 if (contributionList.size() is 0) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
579 return;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
580 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
581
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
582 // The list of all the cool items in their visual order
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
583 CoolItem[] coolItems = coolBar.getItems();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
584 // The wrap indicies of the coolbar
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
585 int[] wrapIndicies = getAdjustedWrapIndices(coolBar.getWrapIndices());
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
586
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
587 int row = 0;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
588 int coolItemIndex = 0;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
589
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
590 // Traverse through all cool items in the coolbar add them to a new
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
591 // data structure
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
592 // in the correct order
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
593 auto displayedItems = new ArrayList(coolBar.getItemCount());
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
594 for (int i = 0; i < coolItems.length; i++) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
595 CoolItem coolItem = coolItems[i];
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
596 if ( auto cbItem = cast(IContributionItem) coolItem.getData() ) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
597 displayedItems.add(Math.min(i, displayedItems.size()), cast(Object) cbItem);
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
598 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
599 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
600
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
601 // Add separators to the displayed Items data structure
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
602 int offset = 0;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
603 for (int i = 1; i < wrapIndicies.length; i++) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
604 int insertAt = wrapIndicies[i] + offset;
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
605 displayedItems.add(insertAt, new Separator(USER_SEPARATOR));
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
606 offset++;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
607 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
608
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
609 // Determine which rows are invisible
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
610 auto existingVisibleRows = new ArrayList(4);
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
611 ListIterator rowIterator = contributionList.listIterator();
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
612 collapseSeparators(rowIterator);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
613 int numRow = 0;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
614 while (rowIterator.hasNext()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
615 // Scan row
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
616 while (rowIterator.hasNext()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
617 IContributionItem cbItem = cast(IContributionItem) rowIterator
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
618 .next();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
619 if (displayedItems.contains(cast(Object) cbItem)) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
620 existingVisibleRows.add(new Integer(numRow));
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
621 break;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
622 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
623 if (cbItem.isSeparator()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
624 break;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
625 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
626 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
627 nextRow(rowIterator, false);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
628 numRow++;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
629 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
630
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
631 auto existingRows = existingVisibleRows.iterator();
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
632 // Adjust row number to the first visible
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
633 if (existingRows.hasNext()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
634 row = (cast(Integer) existingRows.next()).intValue();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
635 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
636
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
637 auto itemLocation = new HashMap();
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
638 for (ListIterator locationIterator = displayedItems.listIterator(); locationIterator
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
639 .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: 90
diff changeset
640 IContributionItem item = cast(IContributionItem) locationIterator
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
641 .next();
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
642 if (item.isSeparator()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
643 if (existingRows.hasNext()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
644 Integer value = cast(Integer) existingRows.next();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
645 row = value.intValue();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
646 } else {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
647 row++;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
648 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
649 } else {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
650 itemLocation.put(cast(Object)item, new Integer(row));
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
651 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
652
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
653 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
654
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
655 // Insert the contribution items in their correct location
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
656 for (ListIterator iterator = displayedItems.listIterator(); iterator
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
657 .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: 90
diff changeset
658 IContributionItem cbItem = cast(IContributionItem) iterator.next();
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
659 if (cbItem.isSeparator()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
660 coolItemIndex = 0;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
661 } else {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
662 relocate(cbItem, coolItemIndex, contributionList, itemLocation);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
663 cbItem.saveWidgetState();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
664 coolItemIndex++;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
665 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
666 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
667
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
668 if (contributionList.size() !is 0) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
669 contributionList = adjustContributionList(contributionList);
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
670 IContributionItem[] array = arraycast!(IContributionItem)( contributionList.toArray());
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
671 internalSetItems(array);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
672 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
673
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
674 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
675
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
676 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
677 * Relocates the given contribution item to the specified index.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
678 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
679 * @param cbItem
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
680 * the conribution item to relocate
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
681 * @param index
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
682 * the index to locate this item
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
683 * @param contributionList
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
684 * the current list of conrtributions
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
685 * @param itemLocation
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
686 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
687 private void relocate(IContributionItem cbItem, int index,
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
688 ArrayList contributionList, HashMap itemLocation) {
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
689
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
690 if (!(cast(Integer)itemLocation.get(cast(Object)cbItem) )) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
691 return;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
692 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
693 int targetRow = (cast(Integer) itemLocation.get(cast(Object)cbItem)).intValue();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
694
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
695 int cbInternalIndex = contributionList.indexOf(cast(Object)cbItem);
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
696
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
697 // by default add to end of list
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
698 int insertAt = contributionList.size();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
699 // Find the row to place this item in.
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
700 ListIterator iterator = contributionList.listIterator();
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
701 // bypass any separators at the begining
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
702 collapseSeparators(iterator);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
703 int currentRow = -1;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
704 while (iterator.hasNext()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
705
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
706 currentRow++;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
707 if (currentRow is targetRow) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
708 // We found the row to insert the item
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
709 int virtualIndex = 0;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
710 insertAt = iterator.nextIndex();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
711 // first check the position of the current element (item)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
712 // then get the next element
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
713 while (iterator.hasNext()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
714 IContributionItem item = cast(IContributionItem) iterator
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
715 .next();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
716 Integer itemRow = cast(Integer) itemLocation.get( cast(Object) item);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
717 if (item.isSeparator()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
718 break;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
719 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
720 // if the item has an associate widget
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
721 if ((itemRow !is null) && (itemRow.intValue() is targetRow)) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
722 // if the next element is the index we are looking for
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
723 // then break
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
724 if (virtualIndex >= index) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
725 break;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
726 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
727 virtualIndex++;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
728
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
729 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
730 insertAt++;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
731 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
732 // If we don't need to move it then we return
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
733 if (cbInternalIndex is insertAt) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
734 return;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
735 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
736 break;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
737 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
738 nextRow(iterator, true);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
739 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
740 contributionList.remove(cast(Object) cbItem);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
741
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
742 // Adjust insertAt index
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
743 if (cbInternalIndex < insertAt) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
744 insertAt--;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
745 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
746
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
747 // if we didn't find the row then add a new row
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
748 if (currentRow !is targetRow) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
749 contributionList.add(new Separator(USER_SEPARATOR));
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
750 insertAt = contributionList.size();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
751 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
752 insertAt = Math.min(insertAt, contributionList.size());
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
753 contributionList.add(insertAt, cast(Object) cbItem);
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
754
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
755 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
756
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
757 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
758 * Restores the canonical order of this cool bar manager. The canonical
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
759 * order is the order in which the contribution items where added.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
760 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
761 public void resetItemOrder() {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
762 for (ListIterator iterator = cbItemsCreationOrder.listIterator(); iterator
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
763 .hasNext();) {
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
764 IContributionItem item = cast(IContributionItem) iterator.next();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
765 // if its a user separator then do not include in original order.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
766 if ((item.getId() !is null) && (item.getId().equals(USER_SEPARATOR))) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
767 iterator.remove();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
768 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
769 }
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
770 IContributionItem[] itemsToSet = arraycast!(IContributionItem)(cbItemsCreationOrder.toArray());
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
771 setItems(itemsToSet);
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
772 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
773
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
774 /*
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
775 * (non-Javadoc)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
776 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
777 * @see dwtx.jface.action.ICoolBarManager#setContextMenuManager(dwtx.jface.action.IMenuManager)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
778 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
779 public void setContextMenuManager(IMenuManager contextMenuManager) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
780 this.contextMenuManager = cast(MenuManager) contextMenuManager;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
781 if (coolBar !is null) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
782 coolBar.setMenu(getContextMenuControl());
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
783 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
784 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
785
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
786 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
787 * Replaces the current items with the given items.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
788 * Forces an update.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
789 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
790 * @param newItems the items with which to replace the current items
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
791 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
792 public void setItems(IContributionItem[] newItems) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
793 // dispose of all the cool items on the cool bar manager
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
794 if (coolBar !is null) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
795 CoolItem[] coolItems = coolBar.getItems();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
796 for (int i = 0; i < coolItems.length; i++) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
797 dispose(coolItems[i]);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
798 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
799 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
800 // Set the internal structure to this order
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
801 internalSetItems(newItems);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
802 // Force and update
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
803 update(true);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
804 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
805
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
806 /*
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
807 * (non-Javadoc)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
808 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
809 * @see dwtx.jface.action.ICoolBarManager#lockLayout(bool)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
810 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
811 public void setLockLayout(bool value) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
812 if (!coolBarExist()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
813 return;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
814 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
815 coolBar.setLocked(value);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
816 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
817
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
818 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
819 * Subclasses may extend this <code>IContributionManager</code> method,
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
820 * but must call <code>super.update</code>.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
821 *
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
822 * @see dwtx.jface.action.IContributionManager#update(bool)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
823 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
824 public void update(bool force) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
825 if ((!isDirty() && !force) || (!coolBarExist())) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
826 return;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
827 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
828
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
829 bool relock = false;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
830 bool changed = false;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
831
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
832 try {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
833 coolBar.setRedraw(false);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
834
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
835 // Refresh the widget data with the internal data structure.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
836 refresh();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
837
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
838 if (coolBar.getLocked()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
839 coolBar.setLocked(false);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
840 relock = true;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
841 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
842
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
843 /*
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
844 * Make a list of items including only those items that are
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
845 * visible. Separators should stay because they mark line breaks in
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
846 * a cool bar.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
847 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
848 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: 90
diff changeset
849 List visibleItems = new ArrayList(items.length);
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
850 for (int i = 0; i < items.length; i++) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
851 IContributionItem item = items[i];
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
852 if (item.isVisible()) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
853 visibleItems.add(cast(Object)item);
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
854 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
855 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
856
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
857 /*
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
858 * Make a list of CoolItem widgets in the cool bar for which there
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
859 * is no current visible contribution item. These are the widgets
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
860 * to be disposed. Dynamic items are also removed.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
861 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
862 CoolItem[] coolItems = coolBar.getItems();
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
863 ArrayList coolItemsToRemove = new ArrayList(coolItems.length);
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
864 for (int i = 0; i < coolItems.length; i++) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
865 Object data = coolItems[i].getData();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
866 if ((data is null)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
867 || (!visibleItems.contains(data))
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
868 || ((cast(IContributionItem)data ) && (cast(IContributionItem) data)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
869 .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: 90
diff changeset
870 coolItemsToRemove.add(coolItems[i]);
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
871 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
872 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
873
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
874 // Dispose of any items in the list to be removed.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
875 for (int i = coolItemsToRemove.size() - 1; i >= 0; i--) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
876 CoolItem coolItem = cast(CoolItem) coolItemsToRemove.get(i);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
877 if (!coolItem.isDisposed()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
878 Control control = coolItem.getControl();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
879 if (control !is null) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
880 coolItem.setControl(null);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
881 control.dispose();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
882 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
883 coolItem.dispose();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
884 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
885 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
886
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
887 // Add any new items by telling them to fill.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
888 coolItems = coolBar.getItems();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
889 IContributionItem sourceItem;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
890 IContributionItem destinationItem;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
891 int sourceIndex = 0;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
892 int destinationIndex = 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: 90
diff changeset
893 Iterator visibleItemItr = visibleItems.iterator();
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
894 while (visibleItemItr.hasNext()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
895 sourceItem = cast(IContributionItem) visibleItemItr.next();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
896
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
897 // Retrieve the corresponding contribution item from DWT's
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
898 // data.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
899 if (sourceIndex < coolItems.length) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
900 destinationItem = cast(IContributionItem) coolItems[sourceIndex]
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
901 .getData();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
902 } else {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
903 destinationItem = null;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
904 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
905
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
906 // The items match is they are equal or both separators.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
907 if (destinationItem !is null) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
908 if ((cast(Object)sourceItem).opEquals(cast(Object)destinationItem)) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
909 sourceIndex++;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
910 destinationIndex++;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
911 sourceItem.update();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
912 continue;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
913
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
914 } else if ((destinationItem.isSeparator())
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
915 && (sourceItem.isSeparator())) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
916 coolItems[sourceIndex].setData(cast(Object)sourceItem);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
917 sourceIndex++;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
918 destinationIndex++;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
919 sourceItem.update();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
920 continue;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
921
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
922 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
923 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
924
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
925 // Otherwise, a new item has to be added.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
926 int start = coolBar.getItemCount();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
927 sourceItem.fill(coolBar, destinationIndex);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
928 int newItems = coolBar.getItemCount() - start;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
929 for (int i = 0; i < newItems; i++) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
930 coolBar.getItem(destinationIndex++).setData(cast(Object)sourceItem);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
931 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
932 changed = true;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
933 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
934
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
935 // Remove any old widgets not accounted for.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
936 for (int i = coolItems.length - 1; i >= sourceIndex; i--) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
937 final CoolItem item = coolItems[i];
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
938 if (!item.isDisposed()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
939 Control control = item.getControl();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
940 if (control !is null) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
941 item.setControl(null);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
942 control.dispose();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
943 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
944 item.dispose();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
945 changed = true;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
946 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
947 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
948
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
949 // Update wrap indices.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
950 updateWrapIndices();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
951
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
952 // Update the sizes.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
953 for (int i = 0; i < items.length; i++) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
954 IContributionItem item = items[i];
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
955 item.update(SIZE);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
956 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
957
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
958 // if the coolBar was previously locked then lock it
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
959 if (relock) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
960 coolBar.setLocked(true);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
961 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
962
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
963 if (changed) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
964 updateTabOrder();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
965 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
966
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
967 // We are no longer dirty.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
968 setDirty(false);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
969 } finally {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
970 coolBar.setRedraw(true);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
971 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
972 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
973
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
974 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
975 * Sets the tab order of the coolbar to the visual order of its items.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
976 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
977 /* package */void updateTabOrder() {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
978 if (coolBar !is null) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
979 CoolItem[] items = coolBar.getItems();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
980 if (items !is null) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
981 ArrayList children = new ArrayList(items.length);
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
982 for (int i = 0; i < items.length; i++) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
983 if ((items[i].getControl() !is null)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
984 && (!items[i].getControl().isDisposed())) {
104
04b47443bb01 Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents: 90
diff changeset
985 children.add(items[i].getControl());
25
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
986 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
987 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
988 // Convert array
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
989 Control[] childrenArray;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
990 childrenArray = arraycast!(Control)(children.toArray());
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
991
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
992 if (childrenArray !is null) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
993 coolBar.setTabList(childrenArray);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
994 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
995
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
996 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
997 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
998 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
999
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1000 /**
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1001 * Updates the indices at which the cool bar should wrap.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1002 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1003 private void updateWrapIndices() {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1004 final IContributionItem[] items = getItems();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1005 final int numRows = getNumRows(items) - 1;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1006
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1007 // Generate the list of wrap indices.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1008 final int[] wrapIndices = new int[numRows];
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1009 bool foundSeparator = false;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1010 int j = 0;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1011 CoolItem[] coolItems = (coolBar is null) ? null : coolBar.getItems();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1012
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1013 for (int i = 0; i < items.length; i++) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1014 IContributionItem item = items[i];
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1015 CoolItem coolItem = findCoolItem(coolItems, item);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1016 if (item.isSeparator()) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1017 foundSeparator = true;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1018 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1019 if ((!item.isSeparator()) && (!item.isGroupMarker())
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1020 && (item.isVisible()) && (coolItem !is null)
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1021 && (foundSeparator)) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1022 wrapIndices[j] = coolBar.indexOf(coolItem);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1023 j++;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1024 foundSeparator = false;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1025 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1026 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1027
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1028 /*
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1029 * Check to see if these new wrap indices are different than the old
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1030 * ones.
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1031 */
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1032 final int[] oldIndices = coolBar.getWrapIndices();
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1033 bool shouldUpdate = false;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1034 if (oldIndices.length is wrapIndices.length) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1035 for (int i = 0; i < oldIndices.length; i++) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1036 if (oldIndices[i] !is wrapIndices[i]) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1037 shouldUpdate = true;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1038 break;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1039 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1040 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1041 } else {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1042 shouldUpdate = true;
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1043 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1044
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1045 if (shouldUpdate) {
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1046 coolBar.setWrapIndices(wrapIndices);
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1047 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1048 }
ca63e2bea4bf CoolBarManager
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1049 }