annotate dwtx/jface/action/CoolBarManager.d @ 90:7ffeace6c47f

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