diff options
| author | Stephan Wahlbrink | 2021-09-02 11:09:38 +0000 |
|---|---|---|
| committer | Stephan Wahlbrink | 2021-09-02 14:11:56 +0000 |
| commit | 175c44a13dd05b691f444dfc3e748159f2b6c5ad (patch) | |
| tree | ce2ddea1f52feeb3e64044c1691be035f0dd9dee | |
| parent | f83bd16127f2c0e9da9c42148ee024b86913efd3 (diff) | |
| download | org.eclipse.statet-commons-175c44a13dd05b691f444dfc3e748159f2b6c5ad.tar.gz org.eclipse.statet-commons-175c44a13dd05b691f444dfc3e748159f2b6c5ad.tar.xz org.eclipse.statet-commons-175c44a13dd05b691f444dfc3e748159f2b6c5ad.zip | |
Bug 575763: [UI-Workbench] Add more utils for CSS styling
- Add stylable VirtualComposite
Change-Id: Ibd8b78949f3f217e00bdd4cc22aa8474358ac257
15 files changed, 432 insertions, 15 deletions
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/META-INF/MANIFEST.MF b/ecommons/org.eclipse.statet.ecommons.uimisc/META-INF/MANIFEST.MF index 2082894a..e8c39c8d 100644 --- a/ecommons/org.eclipse.statet.ecommons.uimisc/META-INF/MANIFEST.MF +++ b/ecommons/org.eclipse.statet.ecommons.uimisc/META-INF/MANIFEST.MF @@ -29,6 +29,7 @@ Import-Package: com.ibm.icu.lang;version="67.1.0", org.eclipse.debug.ui;resolution:=optional, org.eclipse.e4.ui.css.core.dom;resolution:=optional, org.eclipse.e4.ui.css.core.engine;resolution:=optional, + org.eclipse.e4.ui.css.core.utils;resolution:=optional, org.eclipse.e4.ui.css.swt.dom;resolution:=optional, org.eclipse.e4.ui.css.swt.properties;resolution:=optional, org.eclipse.e4.ui.css.swt.theme;resolution:=optional, @@ -63,4 +64,6 @@ Export-Package: org.eclipse.statet.ecommons.databinding.jface, org.eclipse.statet.ecommons.ui.viewers, org.eclipse.statet.ecommons.ui.viewers.breadcrumb, org.eclipse.statet.ecommons.ui.workbench, + org.eclipse.statet.ecommons.ui.workbench.css, + org.eclipse.statet.ecommons.ui.workbench.css.dom, org.eclipse.statet.ecommons.ui.workbench.workspace diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/plugin.xml b/ecommons/org.eclipse.statet.ecommons.uimisc/plugin.xml index 16c161c8..df85c725 100644 --- a/ecommons/org.eclipse.statet.ecommons.uimisc/plugin.xml +++ b/ecommons/org.eclipse.statet.ecommons.uimisc/plugin.xml @@ -235,13 +235,15 @@ class="org.eclipse.statet.internal.ecommons.ui.swt.css.dom.ECommonsSwtElementProvider"> <widget class="org.eclipse.statet.ecommons.ui.swt.expandable.ExpandableComposite"/> + <widget + class="org.eclipse.statet.internal.ecommons.ui.swt.css.dom.VirtualWidget"/> </provider> </extension> <extension point="org.eclipse.e4.ui.css.core.propertyHandler"> <handler adapter="org.eclipse.statet.internal.ecommons.ui.swt.css.dom.ExpandableCompositeElement" - handler="org.eclipse.statet.internal.ecommons.ui.swt.css.properties.ExpandableCompositeHandler"> + handler="org.eclipse.statet.internal.ecommons.ui.swt.css.properties.ExpandableCompositePropertyHandler"> <property-name name="swt-titlebar-color"/> </handler> diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/swt/expandable/ExpandableComposite.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/swt/expandable/ExpandableComposite.java index af1f4240..9e5428f3 100644 --- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/swt/expandable/ExpandableComposite.java +++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/swt/expandable/ExpandableComposite.java @@ -669,7 +669,7 @@ public class ExpandableComposite extends Canvas { case SWT.Paint: if (ExpandableComposite.this.toggle != null && (getExpansionStyle() & NO_TITLE_FOCUS_BOX) == 0) { - paintTitleFocus(e.gc); + paintTitleFocus(nonNullAssert(e.gc)); } break; case SWT.Resize: @@ -1137,7 +1137,8 @@ public class ExpandableComposite extends Canvas { final var layout= (ExpandableLayout)getLayout(); if (wHint == SWT.DEFAULT || hHint == SWT.DEFAULT) { size= layout.computeSize(this, wHint, hHint, changed); - } else { + } + else { size= new Point(wHint, hHint); } final Rectangle trim= computeTrim(0, 0, size.x, size.y); diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItem.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItem.java index 1929f76f..5c876745 100644 --- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItem.java +++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItem.java @@ -29,7 +29,7 @@ import org.eclipse.swt.widgets.Shell; import org.eclipse.statet.jcommons.lang.NonNullByDefault; import org.eclipse.statet.jcommons.lang.Nullable; -import org.eclipse.statet.ecommons.ui.workbench.StylingUtils; +import org.eclipse.statet.ecommons.ui.workbench.css.StylingUtils; /** diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItemDetails.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItemDetails.java index 8503fe66..c05049fd 100644 --- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItemDetails.java +++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItemDetails.java @@ -43,7 +43,7 @@ import org.eclipse.statet.jcommons.lang.NonNull; import org.eclipse.statet.jcommons.lang.NonNullByDefault; import org.eclipse.statet.jcommons.lang.Nullable; -import org.eclipse.statet.ecommons.ui.workbench.StylingUtils; +import org.eclipse.statet.ecommons.ui.workbench.css.StylingUtils; /** diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItemDropDown.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItemDropDown.java index aff4838e..0e4359cc 100644 --- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItemDropDown.java +++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItemDropDown.java @@ -68,7 +68,7 @@ import org.eclipse.statet.jcommons.lang.NonNullByDefault; import org.eclipse.statet.jcommons.lang.Nullable; import org.eclipse.statet.ecommons.ui.swt.AccessibleArrowImage; -import org.eclipse.statet.ecommons.ui.workbench.StylingUtils; +import org.eclipse.statet.ecommons.ui.workbench.css.StylingUtils; /** diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbViewer.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbViewer.java index bf5beaec..f32afedb 100644 --- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbViewer.java +++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbViewer.java @@ -56,7 +56,7 @@ import org.eclipse.statet.jcommons.lang.NonNull; import org.eclipse.statet.jcommons.lang.NonNullByDefault; import org.eclipse.statet.jcommons.lang.Nullable; -import org.eclipse.statet.ecommons.ui.workbench.StylingUtils; +import org.eclipse.statet.ecommons.ui.workbench.css.StylingUtils; /** diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/StylingUtils.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/css/StylingUtils.java index 784fdc77..6ff6d29f 100644 --- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/StylingUtils.java +++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/css/StylingUtils.java @@ -12,7 +12,7 @@ # Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation #=============================================================================*/ -package org.eclipse.statet.ecommons.ui.workbench; +package org.eclipse.statet.ecommons.ui.workbench.css; import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullAssert; diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/css/VirtualComposite.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/css/VirtualComposite.java new file mode 100644 index 00000000..90b4c4ab --- /dev/null +++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/css/VirtualComposite.java @@ -0,0 +1,23 @@ +/*=============================================================================# + # Copyright (c) 2021 Stephan Wahlbrink and others. + # + # This program and the accompanying materials are made available under the + # terms of the Eclipse Public License 2.0 which is available at + # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + # which is available at https://www.apache.org/licenses/LICENSE-2.0. + # + # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + # + # Contributors: + # Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation + #=============================================================================*/ + +package org.eclipse.statet.ecommons.ui.workbench.css; + +import org.eclipse.statet.jcommons.lang.NonNullByDefault; + + +@NonNullByDefault +public interface VirtualComposite { + +} diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/css/dom/VirtualCompositeStylableElement.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/css/dom/VirtualCompositeStylableElement.java new file mode 100644 index 00000000..334eefc1 --- /dev/null +++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/css/dom/VirtualCompositeStylableElement.java @@ -0,0 +1,98 @@ +/*=============================================================================# + # Copyright (c) 2021 Stephan Wahlbrink and others. + # + # This program and the accompanying materials are made available under the + # terms of the Eclipse Public License 2.0 which is available at + # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + # which is available at https://www.apache.org/licenses/LICENSE-2.0. + # + # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + # + # Contributors: + # Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation + #=============================================================================*/ + +package org.eclipse.statet.ecommons.ui.workbench.css.dom; + +import org.eclipse.e4.ui.css.core.engine.CSSEngine; +import org.eclipse.e4.ui.css.swt.dom.WidgetElement; +import org.eclipse.swt.widgets.Control; + +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import org.eclipse.statet.jcommons.collections.ImList; +import org.eclipse.statet.jcommons.lang.NonNullByDefault; +import org.eclipse.statet.jcommons.lang.Nullable; + +import org.eclipse.statet.ecommons.ui.workbench.css.VirtualComposite; +import org.eclipse.statet.internal.ecommons.ui.swt.css.dom.VirtualCompositeSkinListener; + + +@NonNullByDefault +@SuppressWarnings("restriction") +public abstract class VirtualCompositeStylableElement<TControl extends Control & VirtualComposite> + extends WidgetElement implements NodeList { + + + private final ImList<? extends VirtualStylableElement<? extends VirtualCompositeStylableElement<TControl>>> children; + + + public VirtualCompositeStylableElement(final TControl control, final CSSEngine engine) { + super(control, engine); + + this.children= createChildren(control); + + control.addDisposeListener((event) -> dispose()); + + VirtualCompositeSkinListener.enable(control.getDisplay(), engine); + } + + protected abstract ImList<? extends VirtualStylableElement<? extends VirtualCompositeStylableElement<TControl>>> createChildren( + final TControl control); + + @Override + public void dispose() { + super.dispose(); + + for (final var child : this.children) { + this.engine.handleWidgetDisposed(child); + child.dispose(); + } + } + + + @Override + public NodeList getChildNodes() { + return this; + } + + @Override + public int getLength() { + return this.children.size(); + } + + @Override + public @Nullable Node item(final int index) { + if (index >= 0 && index < this.children.size()) { + return this.children.get(index); + } + return null; + } + + + @Override + @SuppressWarnings("unchecked") + public TControl getNativeWidget() { + return (TControl)super.getNativeWidget(); + } + + + @Override + public String toString() { + final var sb= new StringBuilder(); + VirtualStylableElement.appendName(sb, this, true); + return sb.toString(); + } + +} diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/css/dom/VirtualStylableElement.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/css/dom/VirtualStylableElement.java new file mode 100644 index 00000000..991dd94f --- /dev/null +++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/workbench/css/dom/VirtualStylableElement.java @@ -0,0 +1,156 @@ +/*=============================================================================# + # Copyright (c) 2021 Stephan Wahlbrink and others. + # + # This program and the accompanying materials are made available under the + # terms of the Eclipse Public License 2.0 which is available at + # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + # which is available at https://www.apache.org/licenses/LICENSE-2.0. + # + # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + # + # Contributors: + # Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation + #=============================================================================*/ + +package org.eclipse.statet.ecommons.ui.workbench.css.dom; + +import org.eclipse.e4.ui.css.core.dom.CSSStylableElement; +import org.eclipse.e4.ui.css.core.dom.ElementAdapter; +import org.eclipse.e4.ui.css.core.engine.CSSEngine; +import org.eclipse.e4.ui.css.core.utils.ClassUtils; + +import org.w3c.dom.NodeList; + +import org.eclipse.statet.jcommons.collections.ImCollections; +import org.eclipse.statet.jcommons.collections.ImList; +import org.eclipse.statet.jcommons.lang.NonNullByDefault; +import org.eclipse.statet.jcommons.lang.Nullable; + +import org.eclipse.statet.internal.ecommons.ui.swt.css.dom.VirtualWidget; + + +@NonNullByDefault +@SuppressWarnings("restriction") +public abstract class VirtualStylableElement<TParent extends CSSStylableElement> + extends ElementAdapter implements NodeList { + + + private final TParent parent; + + private final String name; + private final @Nullable String cssClass; + + private ImList<? extends VirtualStylableElement<? extends VirtualStylableElement<?>>> children= ImCollections.emptyList(); + + + public VirtualStylableElement(final TParent parent, + final String name, final @Nullable String cssClass, + final CSSEngine engine) { + super(new VirtualWidget(), engine); + ((VirtualWidget)getNativeWidget()).setElement(this); + this.parent= parent; + this.name= name; + this.cssClass= cssClass; + } + + protected void init(final ImList<? extends VirtualStylableElement<? extends VirtualStylableElement<TParent>>> children) { + this.children= children; + } + + @Override + public void dispose() { + super.dispose(); + + for (final VirtualStylableElement<?> child : this.children) { + child.dispose(); + } + } + + + @Override + public TParent getParentNode() { + return this.parent; + } + + @Override + public NodeList getChildNodes() { + return this; + } + + @Override + public int getLength() { + return this.children.size(); + } + + @Override + public @Nullable VirtualStylableElement<? extends VirtualStylableElement<?>> item(final int index) { + if (index >= 0 && index < this.children.size()) { + return this.children.get(index); + } + return null; + } + + + @Override + public @Nullable String getNamespaceURI() { + return ClassUtils.getPackageName(VirtualCompositeStylableElement.class); + } + + @Override + public String getLocalName() { + return this.name; + } + + @Override + public @Nullable String getCSSId() { + return null; + } + + @Override + public @Nullable String getCSSClass() { + return this.cssClass; + } + + @Override + public @Nullable String getCSSStyle() { + return null; + } + + @Override + public String getAttribute(final String name) { + return ""; //$NON-NLS-1$ + } + + + @Override + public String toString() { + final var sb= new StringBuilder(); + appendNameRec(sb, this); + return sb.toString(); + } + + static void appendNameRec(final StringBuilder sb, final VirtualStylableElement<?> element) { + final var parentNode= element.getParentNode(); + if (parentNode instanceof VirtualStylableElement<?>) { + appendNameRec(sb, (VirtualStylableElement<?>)parentNode); + sb.append(' '); + } + else { + appendName(sb, parentNode, true); + sb.append(' '); + } + appendName(sb, element, false); + } + + static void appendName(final StringBuilder sb, final CSSStylableElement element, final boolean id) { + sb.append(element.getLocalName()); + final String cssClass= element.getCSSClass(); + if (cssClass != null) { + sb.append('.').append(cssClass); + } + if (id) { + sb.append('#').append(System.identityHashCode(element)); + } + } + +} diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/dom/ECommonsSwtElementProvider.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/dom/ECommonsSwtElementProvider.java index a3528b5b..f6248207 100644 --- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/dom/ECommonsSwtElementProvider.java +++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/dom/ECommonsSwtElementProvider.java @@ -36,6 +36,9 @@ public class ECommonsSwtElementProvider implements IElementProvider { if (element instanceof ExpandableComposite) { return new ExpandableCompositeElement((ExpandableComposite)element, engine); } + if (element instanceof VirtualWidget) { + return ((VirtualWidget)element).getElement(); + } return null; } diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/dom/VirtualCompositeSkinListener.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/dom/VirtualCompositeSkinListener.java new file mode 100644 index 00000000..5551902d --- /dev/null +++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/dom/VirtualCompositeSkinListener.java @@ -0,0 +1,63 @@ +/*=============================================================================# + # Copyright (c) 2021 Stephan Wahlbrink and others. + # + # This program and the accompanying materials are made available under the + # terms of the Eclipse Public License 2.0 which is available at + # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + # which is available at https://www.apache.org/licenses/LICENSE-2.0. + # + # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + # + # Contributors: + # Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation + #=============================================================================*/ + +package org.eclipse.statet.internal.ecommons.ui.swt.css.dom; + +import org.eclipse.e4.ui.css.core.engine.CSSEngine; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Listener; + +import org.eclipse.statet.jcommons.lang.NonNullByDefault; + +import org.eclipse.statet.ecommons.ui.workbench.css.VirtualComposite; +import org.eclipse.statet.ecommons.ui.workbench.css.dom.VirtualStylableElement; + + +/** + * Add a listener for {@link SWT#Skin} to apply styles to {@link VirtualStylableElement}s of + * {@link VirtualComposite}s. + */ +@NonNullByDefault +@SuppressWarnings("restriction") +public class VirtualCompositeSkinListener implements Listener { + + + private static boolean isEnabled; + + public static void enable(final Display display, final CSSEngine engine) { + if (isEnabled) { + return; + } + display.addListener(SWT.Skin, new VirtualCompositeSkinListener(display, engine)); + isEnabled= true; + } + + + private final CSSEngine engine; + + + public VirtualCompositeSkinListener(final Display display, final CSSEngine cssEngine) { + this.engine = cssEngine; + } + + @Override + public void handleEvent(final Event event) { + if (event.widget instanceof VirtualComposite) { + VirtualCompositeSkinListener.this.engine.applyStyles(event.widget, true); + } + } + +}
\ No newline at end of file diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/dom/VirtualWidget.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/dom/VirtualWidget.java new file mode 100644 index 00000000..5f87be74 --- /dev/null +++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/dom/VirtualWidget.java @@ -0,0 +1,43 @@ +/*=============================================================================# + # Copyright (c) 2021 Stephan Wahlbrink and others. + # + # This program and the accompanying materials are made available under the + # terms of the Eclipse Public License 2.0 which is available at + # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 + # which is available at https://www.apache.org/licenses/LICENSE-2.0. + # + # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 + # + # Contributors: + # Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation + #=============================================================================*/ + +package org.eclipse.statet.internal.ecommons.ui.swt.css.dom; + +import org.eclipse.e4.ui.css.core.dom.CSSStylableElement; + +import org.eclipse.statet.jcommons.lang.NonNullByDefault; + + +@NonNullByDefault +@SuppressWarnings("restriction") +public class VirtualWidget { + + + private CSSStylableElement element; + + + @SuppressWarnings("null") + public VirtualWidget() { + } + + public void setElement(final CSSStylableElement element) { + this.element= element; + } + + + public CSSStylableElement getElement() { + return this.element; + } + +} diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/properties/ExpandableCompositeHandler.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/properties/ExpandableCompositePropertyHandler.java index 7d749d0b..1db3d97e 100644 --- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/properties/ExpandableCompositeHandler.java +++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/internal/ecommons/ui/swt/css/properties/ExpandableCompositePropertyHandler.java @@ -29,7 +29,7 @@ import org.eclipse.statet.ecommons.ui.swt.expandable.ExpandableComposite; @NonNullByDefault @SuppressWarnings("restriction") -public class ExpandableCompositeHandler extends AbstractCSSPropertySWTHandler { +public class ExpandableCompositePropertyHandler extends AbstractCSSPropertySWTHandler { private static final String TITLE_BAR_FOREGROUND= "swt-titlebar-color"; //$NON-NLS-1$ @@ -38,6 +38,31 @@ public class ExpandableCompositeHandler extends AbstractCSSPropertySWTHandler { @Override protected @Nullable String retrieveCSSProperty(final Control control, final String property, final @Nullable String pseudo, final CSSEngine engine) throws Exception { + if (!(control instanceof ExpandableComposite)) { + return null; + } + final var expandableComposite= (ExpandableComposite)control; + + switch (property) { + case TITLE_BAR_FOREGROUND: + if (pseudo == null) { + return engine.convert(expandableComposite.getTitleBarForeground(), + Color.class, null ); + } + return null; +// case CSSPropertyFormHandler.TB_TOGGLE: +// if (pseudo == null) { +// expandableComposite.setToggleColor( +// (Color)engine.convert(value, Color.class, control.getDisplay()) ); +// } +// else if (pseudo.equalsIgnoreCase("hover")) { //$NON-NLS-1$ +// expandableComposite.setToggleHoverColor( +// (Color)engine.convert(value, Color.class, control.getDisplay()) ); +// } +// return; + default: + break; + } return null; } @@ -45,16 +70,15 @@ public class ExpandableCompositeHandler extends AbstractCSSPropertySWTHandler { protected void applyCSSProperty(final Control control, final String property, final CSSValue value, final @Nullable String pseudo, final CSSEngine engine) throws Exception { - if (!(control instanceof ExpandableComposite) - || property == null - || value.getCssValueType() != CSSValue.CSS_PRIMITIVE_VALUE) { + if (!(control instanceof ExpandableComposite)) { return; } final var expandableComposite= (ExpandableComposite)control; - switch (property.toLowerCase()) { + switch (property) { case TITLE_BAR_FOREGROUND: - if (pseudo == null) { + if (pseudo == null + && value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE) { expandableComposite.setTitleBarForeground( (Color)engine.convert(value, Color.class, control.getDisplay()) ); } @@ -70,8 +94,9 @@ public class ExpandableCompositeHandler extends AbstractCSSPropertySWTHandler { // } // return; default: - return; + break; } + return; } } |
