annotate dwtx/jface/action/CoolBarManager.d @ 40:da5ad8eedf5d

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