Skip to content

Commit 74e6073

Browse files
committed
Collapse trivial CTabFolder property handlers into two generic ones
Seventeen near-identical handler classes in css.swt each applied one CSS property by calling a single CTabFolder or ICTabRendering setter. Replace them with two data-driven handlers: CSSPropertyCTabFolderSWTHandler maps property names to folder setters (ten boolean, two int) and CSSPropertyCTabFolderRendererSWTHandler maps them to renderer setters (four color, one boolean). The per-property value guards are kept as before, and plugin.xml still registers each property name individually, so overrides contributed through the propertyHandler extension point resolve exactly as they did with the dedicated classes.
1 parent d2a90cb commit 74e6073

20 files changed

Lines changed: 207 additions & 899 deletions

bundles/org.eclipse.e4.ui.css.swt/plugin.xml

Lines changed: 22 additions & 131 deletions
Original file line numberDiff line numberDiff line change
@@ -136,33 +136,36 @@
136136
<handler
137137
adapter="org.eclipse.e4.ui.css.swt.dom.CTabFolderElement"
138138
composite="false"
139-
handler="org.eclipse.e4.ui.css.swt.properties.custom.CSSPropertyBorderVisibleSWTHandler">
140-
<property-name
141-
name="border-visible">
142-
</property-name>
143-
</handler>
144-
<handler
145-
adapter="org.eclipse.e4.ui.css.swt.dom.CTabFolderElement"
146-
composite="false"
147-
handler="org.eclipse.e4.ui.css.swt.properties.custom.CSSPropertyTabPositionSWTHandler">
148-
<property-name
149-
name="swt-tab-position">
150-
</property-name>
139+
handler="org.eclipse.e4.ui.css.swt.properties.custom.CSSPropertyCTabFolderSWTHandler">
140+
<property-name name="border-visible"/>
141+
<property-name name="swt-maximize-visible"/>
142+
<property-name name="swt-minimize-visible"/>
143+
<property-name name="swt-maximized"/>
144+
<property-name name="swt-minimized"/>
145+
<property-name name="swt-simple"/>
146+
<property-name name="swt-single"/>
147+
<property-name name="swt-unselected-close-visible"/>
148+
<property-name name="swt-unselected-image-visible"/>
149+
<property-name name="swt-selected-image-visible"/>
150+
<property-name name="swt-tab-height"/>
151+
<property-name name="swt-tab-text-minimum-characters"/>
151152
</handler>
152153
<handler
153154
adapter="org.eclipse.e4.ui.css.swt.dom.CTabFolderElement"
154155
composite="false"
155-
handler="org.eclipse.e4.ui.css.swt.properties.custom.CSSPropertyOuterKeylineSWTHandler">
156-
<property-name
157-
name="swt-outer-keyline-color">
158-
</property-name>
156+
handler="org.eclipse.e4.ui.css.swt.properties.custom.CSSPropertyCTabFolderRendererSWTHandler">
157+
<property-name name="swt-inner-keyline-color"/>
158+
<property-name name="swt-outer-keyline-color"/>
159+
<property-name name="swt-tab-outline"/>
160+
<property-name name="swt-unselected-hot-tab-color-background"/>
161+
<property-name name="swt-draw-custom-tab-content-background"/>
159162
</handler>
160-
<handler
163+
<handler
161164
adapter="org.eclipse.e4.ui.css.swt.dom.CTabFolderElement"
162165
composite="false"
163-
handler="org.eclipse.e4.ui.css.swt.properties.custom.CSSPropertyInnerKeylineSWTHandler">
166+
handler="org.eclipse.e4.ui.css.swt.properties.custom.CSSPropertyTabPositionSWTHandler">
164167
<property-name
165-
name="swt-inner-keyline-color">
168+
name="swt-tab-position">
166169
</property-name>
167170
</handler>
168171
<handler
@@ -282,94 +285,6 @@
282285
name="font-weight">
283286
</property-name>
284287
</handler>
285-
<handler
286-
adapter="org.eclipse.e4.ui.css.swt.dom.CTabFolderElement"
287-
composite="false"
288-
handler="org.eclipse.e4.ui.css.swt.properties.custom.CSSPropertySimpleSWTHandler">
289-
<property-name
290-
name="swt-simple">
291-
</property-name>
292-
</handler>
293-
<handler
294-
adapter="org.eclipse.e4.ui.css.swt.dom.CTabFolderElement"
295-
composite="false"
296-
handler="org.eclipse.e4.ui.css.swt.properties.custom.CSSPropertyMaximizeVisibleSWTHandler">
297-
<property-name
298-
name="swt-maximize-visible">
299-
</property-name>
300-
</handler>
301-
<handler
302-
adapter="org.eclipse.e4.ui.css.swt.dom.CTabFolderElement"
303-
composite="false"
304-
handler="org.eclipse.e4.ui.css.swt.properties.custom.CSSPropertyMinimizeVisibleSWTHandler">
305-
<property-name
306-
name="swt-minimize-visible">
307-
</property-name>
308-
</handler>
309-
<handler
310-
adapter="org.eclipse.e4.ui.css.swt.dom.CTabFolderElement"
311-
composite="false"
312-
handler="org.eclipse.e4.ui.css.swt.properties.custom.CSSPropertyMaximizedSWTHandler">
313-
<property-name
314-
name="swt-maximized">
315-
</property-name>
316-
</handler>
317-
<handler
318-
adapter="org.eclipse.e4.ui.css.swt.dom.CTabFolderElement"
319-
composite="false"
320-
handler="org.eclipse.e4.ui.css.swt.properties.custom.CSSPropertyMinimizedSWTHandler">
321-
<property-name
322-
name="swt-minimized">
323-
</property-name>
324-
</handler>
325-
<handler
326-
adapter="org.eclipse.e4.ui.css.swt.dom.CTabFolderElement"
327-
composite="false"
328-
handler="org.eclipse.e4.ui.css.swt.properties.custom.CSSPropertyTabHeightHandler">
329-
<property-name
330-
name="swt-tab-height">
331-
</property-name>
332-
</handler>
333-
<handler
334-
adapter="org.eclipse.e4.ui.css.swt.dom.CTabFolderElement"
335-
composite="false"
336-
handler="org.eclipse.e4.ui.css.swt.properties.custom.CSSPropertyTabTextMinimumCharactersSWTHandler">
337-
<property-name
338-
name="swt-tab-text-minimum-characters">
339-
</property-name>
340-
</handler>
341-
<handler
342-
adapter="org.eclipse.e4.ui.css.swt.dom.CTabFolderElement"
343-
composite="false"
344-
handler="org.eclipse.e4.ui.css.swt.properties.custom.CSSPropertySingleSWTHandler">
345-
<property-name
346-
name="swt-single">
347-
</property-name>
348-
</handler>
349-
<handler
350-
adapter="org.eclipse.e4.ui.css.swt.dom.CTabFolderElement"
351-
composite="false"
352-
handler="org.eclipse.e4.ui.css.swt.properties.custom.CSSPropertyUnselectedCloseVisibleSWTHandler">
353-
<property-name
354-
name="swt-unselected-close-visible">
355-
</property-name>
356-
</handler>
357-
<handler
358-
adapter="org.eclipse.e4.ui.css.swt.dom.CTabFolderElement"
359-
composite="false"
360-
handler="org.eclipse.e4.ui.css.swt.properties.custom.CSSPropertyUnselectedImageVisibleSWTHandler">
361-
<property-name
362-
name="swt-unselected-image-visible">
363-
</property-name>
364-
</handler>
365-
<handler
366-
adapter="org.eclipse.e4.ui.css.swt.dom.CTabFolderElement"
367-
composite="false"
368-
handler="org.eclipse.e4.ui.css.swt.properties.custom.CSSPropertySelectedImageVisibleSWTHandler">
369-
<property-name
370-
name="swt-selected-image-visible">
371-
</property-name>
372-
</handler>
373288
<handler
374289
adapter="org.eclipse.e4.ui.css.swt.dom.CTabFolderElement"
375290
composite="false"
@@ -378,14 +293,6 @@
378293
name="swt-selected-tabs-background">
379294
</property-name>
380295
</handler>
381-
<handler
382-
adapter="org.eclipse.e4.ui.css.swt.dom.CTabFolderElement"
383-
composite="false"
384-
handler="org.eclipse.e4.ui.css.swt.properties.custom.CSSPropertyCustomTabContentBackgroundSWTHandler">
385-
<property-name
386-
name="swt-draw-custom-tab-content-background">
387-
</property-name>
388-
</handler>
389296
<handler
390297
adapter="org.eclipse.e4.ui.css.swt.dom.CTabFolderElement"
391298
composite="false"
@@ -400,22 +307,6 @@
400307
name="swt-selected-tab-fill">
401308
</property-name>
402309
</handler>
403-
<handler
404-
adapter="org.eclipse.e4.ui.css.swt.dom.CTabFolderElement"
405-
composite="false"
406-
handler="org.eclipse.e4.ui.css.swt.properties.custom.CSSPropertye4TabOutline">
407-
<property-name
408-
name="swt-tab-outline">
409-
</property-name>
410-
</handler>
411-
<handler
412-
adapter="org.eclipse.e4.ui.css.swt.dom.CTabFolderElement"
413-
composite="false"
414-
handler="org.eclipse.e4.ui.css.swt.properties.custom.CSSPropertyUnselectHotTabsColorBackgroundHandler">
415-
<property-name
416-
name="swt-unselected-hot-tab-color-background">
417-
</property-name>
418-
</handler>
419310
<handler
420311
adapter="org.eclipse.e4.ui.css.swt.dom.CTabFolderElement"
421312
composite="true"

bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/properties/custom/CSSPropertyBorderVisibleSWTHandler.java

Lines changed: 0 additions & 42 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2026 Lars Vogel and others.
3+
*
4+
* This program and the accompanying materials
5+
* are made available under the terms of the Eclipse Public License 2.0
6+
* which accompanies this distribution, and is available at
7+
* https://www.eclipse.org/legal/epl-2.0/
8+
*
9+
* SPDX-License-Identifier: EPL-2.0
10+
*
11+
* Contributors:
12+
* Lars Vogel <Lars.Vogel@vogella.com> - initial API and implementation
13+
*******************************************************************************/
14+
package org.eclipse.e4.ui.css.swt.properties.custom;
15+
16+
import java.util.Map;
17+
import java.util.function.BiConsumer;
18+
19+
import org.eclipse.e4.ui.css.core.engine.CSSEngine;
20+
import org.eclipse.e4.ui.css.core.impl.dom.CssValues.CssPrimitive;
21+
import org.eclipse.e4.ui.css.swt.properties.AbstractCSSPropertySWTHandler;
22+
import org.eclipse.e4.ui.internal.css.swt.ICTabRendering;
23+
import org.eclipse.swt.custom.CTabFolder;
24+
import org.eclipse.swt.graphics.Color;
25+
import org.eclipse.swt.widgets.Control;
26+
import org.w3c.dom.css.CSSValue;
27+
28+
/**
29+
* Applies the CSS properties that map directly onto a single
30+
* {@link ICTabRendering} setter of a {@link CTabFolder} renderer.
31+
*/
32+
public class CSSPropertyCTabFolderRendererSWTHandler extends AbstractCSSPropertySWTHandler {
33+
34+
private static final Map<String, BiConsumer<ICTabRendering, Color>> COLOR_SETTERS = Map.of(
35+
"swt-inner-keyline-color", ICTabRendering::setInnerKeyline, //$NON-NLS-1$
36+
"swt-outer-keyline-color", ICTabRendering::setOuterKeyline, //$NON-NLS-1$
37+
"swt-tab-outline", ICTabRendering::setTabOutline, //$NON-NLS-1$
38+
"swt-unselected-hot-tab-color-background", ICTabRendering::setUnselectedHotTabsColorBackground); //$NON-NLS-1$
39+
40+
private static final Map<String, BiConsumer<ICTabRendering, Boolean>> BOOLEAN_SETTERS = Map.of(
41+
"swt-draw-custom-tab-content-background", ICTabRendering::setDrawCustomTabContentBackground); //$NON-NLS-1$
42+
43+
@Override
44+
protected void applyCSSProperty(Control control, String property, CSSValue value, String pseudo, CSSEngine engine)
45+
throws Exception {
46+
if (!(control instanceof CTabFolder folder) || !(value instanceof CssPrimitive)) {
47+
return;
48+
}
49+
BiConsumer<ICTabRendering, Color> colorSetter = COLOR_SETTERS.get(property);
50+
if (colorSetter != null) {
51+
Color color = (Color) engine.convert(value, Color.class, control.getDisplay());
52+
if (folder.getRenderer() instanceof ICTabRendering renderer) {
53+
colorSetter.accept(renderer, color);
54+
}
55+
return;
56+
}
57+
BiConsumer<ICTabRendering, Boolean> booleanSetter = BOOLEAN_SETTERS.get(property);
58+
if (booleanSetter != null) {
59+
Boolean enabled = (Boolean) engine.convert(value, Boolean.class, control.getDisplay());
60+
if (folder.getRenderer() instanceof ICTabRendering renderer) {
61+
booleanSetter.accept(renderer, enabled);
62+
}
63+
}
64+
}
65+
66+
@Override
67+
protected String retrieveCSSProperty(Control control, String property, String pseudo, CSSEngine engine)
68+
throws Exception {
69+
return null;
70+
}
71+
}

0 commit comments

Comments
 (0)