Skip to content

Commit 385c972

Browse files
committed
fix #1122 Enhancements to ToggleButton implementation
1 parent a1ffccd commit 385c972

7 files changed

Lines changed: 115 additions & 16 deletions

File tree

domino-ui-shared/src/main/java/org/dominokit/domino/ui/style/Color.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,19 @@ public interface Color {
3535

3636
CssClass getContextColor();
3737

38+
default String getCssVar() {
39+
return "--dui-clr-"
40+
+ getName().toLowerCase().replace("lighten", "l").replace("darken", "d").replace("_", "-");
41+
}
42+
43+
default String toVarValue() {
44+
if (getName().isEmpty()) {
45+
return "unset";
46+
} else {
47+
return "var(" + getCssVar() + ")";
48+
}
49+
}
50+
3851
Color NONE =
3952
new Color() {
4053
@Override
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* Copyright © 2019 Dominokit
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.dominokit.domino.ui.style;
17+
18+
import static java.util.Objects.isNull;
19+
20+
public class HasCssVar implements CssClass {
21+
22+
private final CssClass cssClass;
23+
private final String cssVar;
24+
25+
public static HasCssVar of(CssClass cssClass, String cssVar) {
26+
return new HasCssVar(cssClass, cssVar);
27+
}
28+
29+
public HasCssVar(CssClass cssClass, String cssVar) {
30+
this.cssClass = cssClass;
31+
this.cssVar = cssVar;
32+
}
33+
34+
@Override
35+
public String getCssClass() {
36+
return cssClass.getCssClass();
37+
}
38+
39+
public String cssVarName() {
40+
return cssVar;
41+
}
42+
43+
public String toCssVar() {
44+
if (isNull(cssVar) || cssVar.isEmpty()) {
45+
return "unset";
46+
}
47+
return "var(" + cssVar + ")";
48+
}
49+
}

domino-ui/src/main/java/org/dominokit/domino/ui/button/ToggleButton.java

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
import static java.util.Objects.isNull;
1919
import static java.util.Objects.nonNull;
2020
import static org.dominokit.domino.ui.button.ButtonStyles.dui_toggle_button;
21-
import static org.dominokit.domino.ui.style.ColorsCss.dui_bg_primary;
22-
import static org.dominokit.domino.ui.style.ColorsCss.dui_fg_white;
2321
import static org.dominokit.domino.ui.utils.Domino.button;
2422

2523
import elemental2.dom.HTMLButtonElement;
@@ -28,17 +26,21 @@
2826
import org.dominokit.domino.ui.elements.ButtonElement;
2927
import org.dominokit.domino.ui.icons.Icon;
3028
import org.dominokit.domino.ui.style.BooleanCssClass;
31-
import org.dominokit.domino.ui.style.CompositeCssClass;
29+
import org.dominokit.domino.ui.style.Color;
3230
import org.dominokit.domino.ui.style.CssClass;
3331
import org.dominokit.domino.ui.utils.HasChangeListeners;
32+
import org.dominokit.domino.ui.utils.HasValue;
3433
import org.dominokit.domino.ui.utils.IsToggleGroup;
3534
import org.dominokit.domino.ui.utils.IsToggleItem;
35+
import org.gwtproject.editor.client.TakesValue;
3636

3737
public class ToggleButton extends BaseButton<HTMLButtonElement, ToggleButton>
38-
implements HasChangeListeners<ToggleButton, Boolean>, IsToggleItem<ToggleButton> {
38+
implements HasChangeListeners<ToggleButton, Boolean>,
39+
IsToggleItem<ToggleButton>,
40+
TakesValue<Boolean>,
41+
HasValue<ToggleButton, Boolean> {
3942

40-
private CssClass toggleCssClass = CompositeCssClass.of(dui_bg_primary, dui_fg_white);
41-
private CssClass untoggledCssClass = CssClass.NONE;
43+
private CssClass toggleCssClass = () -> "dui-btn-toggled";
4244
private boolean changeListenersPaused;
4345
private Set<ChangeListener<? super Boolean>> changeListeners;
4446
private boolean state = false;
@@ -148,13 +150,7 @@ public ToggleButton setToggle(boolean toggle, boolean silent) {
148150
ToggleButton updateToggle(boolean toggle, boolean notifyParent) {
149151
boolean oldState = this.state;
150152
this.state = toggle;
151-
if (toggle) {
152-
untoggledCssClass = CompositeCssClass.of(this);
153-
}
154153
addCss(BooleanCssClass.of(toggleCssClass, toggle));
155-
if (!toggle) {
156-
addCss(untoggledCssClass);
157-
}
158154
if (this.state != oldState) {
159155
withPauseChangeListenersToggle(
160156
isChangeListenersPaused(), toggleButton -> triggerChangeListeners(oldState, this.state));
@@ -262,7 +258,29 @@ public ToggleButton setToggleCssClass(CssClass toggleCssClass) {
262258
return this;
263259
}
264260

265-
public boolean getValue() {
261+
public ToggleButton setToggledColors(Color background, Color forground) {
262+
this.setCssProperty("--dui-btn-toggled-bg", background.toVarValue());
263+
this.setCssProperty("--dui-btn-toggled-color", forground.toVarValue());
264+
return this;
265+
}
266+
267+
public Boolean getValue() {
266268
return state;
267269
}
270+
271+
@Override
272+
public ToggleButton withValue(Boolean value) {
273+
return withValue(value, isChangeListenersPaused());
274+
}
275+
276+
@Override
277+
public ToggleButton withValue(Boolean value, boolean silent) {
278+
setToggle(value, silent);
279+
return this;
280+
}
281+
282+
@Override
283+
public void setValue(Boolean value) {
284+
setToggle(value);
285+
}
268286
}

domino-ui/src/main/java/org/dominokit/domino/ui/button/ToggleButtonsGroup.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@
1818
import static java.util.Objects.isNull;
1919
import static java.util.Objects.nonNull;
2020

21-
import elemental2.dom.DomGlobal;
2221
import java.util.Collections;
2322
import java.util.HashSet;
2423
import java.util.Objects;
2524
import java.util.Optional;
2625
import java.util.Set;
2726
import java.util.stream.Collectors;
2827
import org.dominokit.domino.ui.button.group.BaseButtonsGroup;
28+
import org.dominokit.domino.ui.style.Color;
2929
import org.dominokit.domino.ui.style.CssClass;
3030
import org.dominokit.domino.ui.utils.HasChangeListeners;
3131
import org.dominokit.domino.ui.utils.IsToggleGroup;
@@ -87,7 +87,6 @@ public void onItemToggle(ToggleButton toggleItem) {
8787
}
8888
triggerChangeListeners(oldValue, newValue);
8989
} else {
90-
DomGlobal.console.info("Only multiple toggle is allowed for this group");
9190
Optional<ToggleButton> first =
9291
getButtons().stream()
9392
.filter(ToggleButton::isToggled)
@@ -189,4 +188,15 @@ public ToggleButtonsGroup setToggleCssClass(CssClass toggleCssClass) {
189188
this.cssToggleClass = toggleCssClass;
190189
return this;
191190
}
191+
192+
public ToggleButtonsGroup setToggledColors(Color background, Color forground) {
193+
this.setCssProperty("--dui-btn-toggled-bg", background.toVarValue());
194+
this.setCssProperty("--dui-btn-toggled-color", forground.toVarValue());
195+
return this;
196+
}
197+
198+
@Override
199+
public ToggleButtonsGroup appendChild(ToggleButton... buttons) {
200+
return super.appendChild(buttons);
201+
}
192202
}

domino-ui/src/main/resources/org/dominokit/domino/ui/public/css/domino-ui/dui-components/domino-ui-buttons.css

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,4 +229,9 @@ a.dui-btn {
229229

230230
.dui-top-scroller:hover {
231231
opacity: 1;
232+
}
233+
234+
.dui-toggle-button.dui-btn-toggled {
235+
--dui-btn-bg-clr: var(--dui-btn-toggled-bg);
236+
--dui-btn-fg-clr: var(--dui-btn-toggled-color);
232237
}

domino-ui/src/main/resources/org/dominokit/domino/ui/public/css/domino-ui/dui-components/domino-ui-menu.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@
148148
position: absolute;
149149
width: fit-content;
150150
box-shadow: var(--dui-box-shadow);
151-
min-width: max(var(--dui-spc-40), var(--dui-menu-drop-min-width));
151+
min-width: max(var(--dui-spc-40), var(--dui-menu-drop-width, var(--dui-menu-drop-min-width)));
152152
}
153153

154154
.dui-menu-drop.dui-context-menu {

domino-ui/src/main/resources/org/dominokit/domino/ui/public/css/domino-ui/dui-components/domino-ui-theme-default.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,9 @@ body.dui {
560560
--dui-scroll-top-button-zindex: 9999999999;
561561
--dui-scroll-top-button-opacity: 04;
562562

563+
--dui-btn-toggled-bg: var(--dui-accent-d-2);
564+
--dui-btn-toggled-color: var(--dui-highlight-color);
565+
563566
/* ===================== Breadcrumb ==================================== */
564567

565568
--dui-bc-default-bg: var(--dui-clr-transparent);
@@ -926,6 +929,7 @@ body.dui {
926929
--dui-menu-subheader-border-color: var(--dui-accent-l-3);
927930

928931
--dui-menu-drop-z-index: var(--dui-z-index-start);
932+
F--dui-menu-drop-min-width: var(--dui-spc-40);
929933

930934
--dui-menu-header-bar-padding: var(--dui-spc-px-5);
931935

0 commit comments

Comments
 (0)