Browse Source

Read-only styles shouldn't override borderless background styles. (#11692)

* Read-only styles shouldn't override borderless background styles.

- Fixed for ComboBox and DateField styles, other tested components
already do it right.

Fixes #11671

* Merge branch 'master' into issue11671
tags/8.10.0.alpha1
Anna Koskinen 4 years ago
parent
commit
bcb5aada51

+ 6
- 0
themes/src/main/themes/VAADIN/themes/valo/components/_combobox.scss View File

display: none; display: none;
} }
} }

&.borderless {
[class*="input"] {
@include valo-textfield-borderless-style;
}
}
} }
} }



+ 6
- 0
themes/src/main/themes/VAADIN/themes/valo/components/_datefield.scss View File

display: none; display: none;
} }
} }

&.borderless {
[class*="textfield"] {
@include valo-textfield-borderless-style;
}
}
} }
} }



+ 19
- 0
uitest/src/main/java/com/vaadin/tests/components/uitest/BackgroundColorThemeTestUI.java View File

package com.vaadin.tests.components.uitest;

public class BackgroundColorThemeTestUI extends ThemeTestUI {
@Override
protected boolean showAdditionalControlFields() {
return true;
}

@Override
protected Integer getTicketNumber() {
return 11671;
}

@Override
protected String getTestDescription() {
return super.getTestDescription()
+ "<br>Read-only styles shouldn't override the transparent background of borderless components.";
}
}

+ 11
- 0
uitest/src/main/java/com/vaadin/tests/components/uitest/TestSampler.java View File

import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;


import com.vaadin.data.HasValue.ValueChangeListener;
import com.vaadin.tests.components.uitest.components.AccordionsCssTest; import com.vaadin.tests.components.uitest.components.AccordionsCssTest;
import com.vaadin.tests.components.uitest.components.ButtonsCssTest; import com.vaadin.tests.components.uitest.components.ButtonsCssTest;
import com.vaadin.tests.components.uitest.components.DatesCssTest; import com.vaadin.tests.components.uitest.components.DatesCssTest;
public static final String ICON_URL = "../runo/icons/16/help.png"; public static final String ICON_URL = "../runo/icons/16/help.png";


private List<Component> components = new ArrayList<>(); private List<Component> components = new ArrayList<>();
private List<ValueChangeListener<Boolean>> readOnlyChangeListeners = new ArrayList<ValueChangeListener<Boolean>>();


private ComponentContainer currentTab; private ComponentContainer currentTab;


c.addStyleName(newStyleName); c.addStyleName(newStyleName);
} }
} }

public List<ValueChangeListener<Boolean>> getReadOnlyChangeListeners() {
return readOnlyChangeListeners;
}

public void addReadOnlyChangeListener(
ValueChangeListener<Boolean> listener) {
readOnlyChangeListeners.add(listener);
}
} }

+ 45
- 0
uitest/src/main/java/com/vaadin/tests/components/uitest/ThemeTestUI.java View File

package com.vaadin.tests.components.uitest; package com.vaadin.tests.components.uitest;


import java.util.Arrays;

import com.vaadin.data.HasValue.ValueChangeListener;
import com.vaadin.server.VaadinRequest; import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.components.AbstractReindeerTestUI; import com.vaadin.tests.components.AbstractReindeerTestUI;
import com.vaadin.tests.util.TestUtils;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button; import com.vaadin.ui.Button;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.HorizontalLayout;
import com.vaadin.v7.ui.TextField; import com.vaadin.v7.ui.TextField;


@SuppressWarnings("deprecation")
public class ThemeTestUI extends AbstractReindeerTestUI { public class ThemeTestUI extends AbstractReindeerTestUI {


private TextField customStyle; private TextField customStyle;
private Button setStyleName; private Button setStyleName;
private CheckBox readOnly;
private ComboBox<String> bgColor;
private TestSampler sampler; private TestSampler sampler;
private String customStyleName = null; private String customStyleName = null;




selectors.addComponent(customStyle); selectors.addComponent(customStyle);
selectors.addComponent(setStyleName); selectors.addComponent(setStyleName);
if (showAdditionalControlFields()) {
selectors.addComponent(readOnly);
selectors.setComponentAlignment(readOnly, Alignment.MIDDLE_LEFT);
selectors.addComponent(bgColor);
}


addComponent(selectors); addComponent(selectors);


sampler = new TestSampler(); sampler = new TestSampler();
if (showAdditionalControlFields()) {
for (ValueChangeListener<Boolean> listener : sampler
.getReadOnlyChangeListeners()) {
readOnly.addValueChangeListener(listener);
}
}
addComponent(sampler); addComponent(sampler);


if (showAdditionalControlFields()) {
TestUtils.injectCSS(getLayout().getUI(),
"body .v-app .yellow {background-color: yellow;}");
}
}

protected boolean showAdditionalControlFields() {
return false;
} }


private void createCustomStyleStringField() { private void createCustomStyleStringField() {
setStyleName = new Button("Set stylename", setStyleName = new Button("Set stylename",
event -> onCustomStyleNameChanged(customStyle.getValue())); event -> onCustomStyleNameChanged(customStyle.getValue()));
setStyleName.setId("setcuststyle"); setStyleName.setId("setcuststyle");

if (showAdditionalControlFields()) {
readOnly = new CheckBox("Set read-only");
bgColor = new ComboBox<>(null, Arrays.asList(
"Default sampler background", "Yellow sampler background"));
bgColor.setValue("Default sampler background");
bgColor.setEmptySelectionAllowed(false);
bgColor.setWidth("270px");
bgColor.addValueChangeListener(event -> {
if ("Yellow sampler background".equals(bgColor.getValue())) {
addStyleName("yellow");
} else {
removeStyleName("yellow");
}
});
}
} }


private void onCustomStyleNameChanged(String newStyleName) { private void onCustomStyleNameChanged(String newStyleName) {

+ 12
- 7
uitest/src/main/java/com/vaadin/tests/components/uitest/components/ButtonsCssTest.java View File

import com.vaadin.v7.ui.themes.Reindeer; import com.vaadin.v7.ui.themes.Reindeer;
import com.vaadin.v7.ui.themes.Runo; import com.vaadin.v7.ui.themes.Runo;


@SuppressWarnings("deprecation")
public class ButtonsCssTest extends GridLayout { public class ButtonsCssTest extends GridLayout {


private TestSampler parent; private TestSampler parent;
b.setId("button" + debugIdCounter++); b.setId("button" + debugIdCounter++);
addComponent(b); addComponent(b);


CheckBox cb = new CheckBox("Checkbox");
cb.setId("button" + debugIdCounter++);
addComponent(cb);
CheckBox cb1 = new CheckBox("Checkbox");
cb1.setId("button" + debugIdCounter++);
addComponent(cb1);


cb = new CheckBox("Checkbox with icon");
cb.setIcon(new ThemeResource(TestSampler.ICON_URL));
cb.setId("button" + debugIdCounter++);
addComponent(cb);
CheckBox cb2 = new CheckBox("Checkbox with icon");
cb2.setIcon(new ThemeResource(TestSampler.ICON_URL));
cb2.setId("button" + debugIdCounter++);
addComponent(cb2);


Link l = new Link("A link", new ExternalResource("")); Link l = new Link("A link", new ExternalResource(""));
l.setId("button" + debugIdCounter++); l.setId("button" + debugIdCounter++);
TestSampler.ICON_URL); TestSampler.ICON_URL);
createButtonWith("Down", ChameleonTheme.BUTTON_DOWN, null); createButtonWith("Down", ChameleonTheme.BUTTON_DOWN, null);


parent.addReadOnlyChangeListener(event -> {
cb1.setReadOnly(!cb1.isReadOnly());
cb2.setReadOnly(!cb2.isReadOnly());
});
} }


private void createButtonWith(String caption, String primaryStyleName, private void createButtonWith(String caption, String primaryStyleName,

+ 13
- 0
uitest/src/main/java/com/vaadin/tests/components/uitest/components/DatesCssTest.java View File

package com.vaadin.tests.components.uitest.components; package com.vaadin.tests.components.uitest.components;


import java.time.LocalDate; import java.time.LocalDate;
import java.util.Iterator;


import com.vaadin.shared.ui.datefield.DateResolution; import com.vaadin.shared.ui.datefield.DateResolution;
import com.vaadin.tests.components.TestDateField; import com.vaadin.tests.components.TestDateField;
import com.vaadin.tests.components.uitest.TestSampler; import com.vaadin.tests.components.uitest.TestSampler;
import com.vaadin.ui.AbstractDateField; import com.vaadin.ui.AbstractDateField;
import com.vaadin.ui.AbstractField;
import com.vaadin.ui.Component; import com.vaadin.ui.Component;
import com.vaadin.ui.DateField; import com.vaadin.ui.DateField;
import com.vaadin.ui.GridLayout; import com.vaadin.ui.GridLayout;
import com.vaadin.ui.InlineDateField; import com.vaadin.ui.InlineDateField;
import com.vaadin.v7.ui.themes.ChameleonTheme; import com.vaadin.v7.ui.themes.ChameleonTheme;


@SuppressWarnings("deprecation")
public class DatesCssTest extends GridLayout { public class DatesCssTest extends GridLayout {


private TestSampler parent; private TestSampler parent;
"130px"); "130px");
createDateFieldWith("Big 130px", ChameleonTheme.DATEFIELD_BIG, "130px"); createDateFieldWith("Big 130px", ChameleonTheme.DATEFIELD_BIG, "130px");


parent.addReadOnlyChangeListener(event -> {
Iterator<Component> iterator = iterator();
while (iterator.hasNext()) {
Component c = iterator.next();
if (c instanceof AbstractField) {
AbstractField<?> af = (AbstractField<?>) c;
af.setReadOnly(!af.isReadOnly());
}
}
});
} }


private void createDateFieldWith(String caption, String primaryStyleName, private void createDateFieldWith(String caption, String primaryStyleName,

+ 5
- 0
uitest/src/main/java/com/vaadin/tests/components/uitest/components/FormsCssTest.java View File

import com.vaadin.v7.data.fieldgroup.FieldGroup; import com.vaadin.v7.data.fieldgroup.FieldGroup;
import com.vaadin.v7.data.util.BeanItem; import com.vaadin.v7.data.util.BeanItem;


@SuppressWarnings("deprecation")
public class FormsCssTest extends HorizontalLayout { public class FormsCssTest extends HorizontalLayout {


private TestSampler parent; private TestSampler parent;
login.setHeight("150px"); login.setHeight("150px");
addComponent(login); addComponent(login);


parent.addReadOnlyChangeListener(event -> {
fg.setReadOnly(!fg.isReadOnly());
// it's not possible to set LoginForm read-only
});
} }


@Override @Override

+ 14
- 0
uitest/src/main/java/com/vaadin/tests/components/uitest/components/SelectsCssTest.java View File

package com.vaadin.tests.components.uitest.components; package com.vaadin.tests.components.uitest.components;


import java.util.Iterator;

import com.vaadin.tests.components.uitest.TestSampler; import com.vaadin.tests.components.uitest.TestSampler;
import com.vaadin.ui.Component; import com.vaadin.ui.Component;
import com.vaadin.ui.GridLayout; import com.vaadin.ui.GridLayout;
import com.vaadin.v7.ui.TwinColSelect; import com.vaadin.v7.ui.TwinColSelect;
import com.vaadin.v7.ui.themes.ChameleonTheme; import com.vaadin.v7.ui.themes.ChameleonTheme;


@SuppressWarnings("deprecation")
public class SelectsCssTest extends GridLayout { public class SelectsCssTest extends GridLayout {


private TestSampler parent; private TestSampler parent;
"100px"); "100px");
createComboBoxWith("SelectButton", createComboBoxWith("SelectButton",
ChameleonTheme.COMBOBOX_SELECT_BUTTON, "100px"); ChameleonTheme.COMBOBOX_SELECT_BUTTON, "100px");

parent.addReadOnlyChangeListener(event -> {
Iterator<Component> iterator = iterator();
while (iterator.hasNext()) {
Component c = iterator.next();
if (c instanceof AbstractSelect) {
AbstractSelect as = (AbstractSelect) c;
as.setReadOnly(!as.isReadOnly());
}
}
});
} }


private void createComboBoxWith(String caption, String primaryStyleName, private void createComboBoxWith(String caption, String primaryStyleName,

+ 12
- 7
uitest/src/main/java/com/vaadin/tests/components/uitest/components/SlidersCssTest.java View File

private int debugIdCounter = 0; private int debugIdCounter = 0;


public SlidersCssTest(TestSampler parent) { public SlidersCssTest(TestSampler parent) {
Slider slide = new Slider();
slide.setId("slider" + debugIdCounter++);
parent.addComponent(slide);
Slider slide1 = new Slider();
slide1.setId("slider" + debugIdCounter++);
parent.addComponent(slide1);


slide = new Slider();
slide.setOrientation(SliderOrientation.VERTICAL);
slide.setId("slider" + debugIdCounter++);
parent.addComponent(slide);
Slider slide2 = new Slider();
slide2.setOrientation(SliderOrientation.VERTICAL);
slide2.setId("slider" + debugIdCounter++);
parent.addComponent(slide2);

parent.addReadOnlyChangeListener(event -> {
slide1.setReadOnly(!slide1.isReadOnly());
slide2.setReadOnly(!slide2.isReadOnly());
});
} }
} }

+ 13
- 0
uitest/src/main/java/com/vaadin/tests/components/uitest/components/TablesCssTest.java View File

package com.vaadin.tests.components.uitest.components; package com.vaadin.tests.components.uitest.components;


import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator;


import com.vaadin.event.Action; import com.vaadin.event.Action;
import com.vaadin.server.ThemeResource; import com.vaadin.server.ThemeResource;
import com.vaadin.tests.components.uitest.TestSampler; import com.vaadin.tests.components.uitest.TestSampler;
import com.vaadin.tests.util.TestUtils; import com.vaadin.tests.util.TestUtils;
import com.vaadin.ui.Component;
import com.vaadin.ui.GridLayout; import com.vaadin.ui.GridLayout;
import com.vaadin.v7.ui.Table; import com.vaadin.v7.ui.Table;
import com.vaadin.v7.ui.themes.ChameleonTheme; import com.vaadin.v7.ui.themes.ChameleonTheme;
import com.vaadin.v7.ui.themes.Reindeer; import com.vaadin.v7.ui.themes.Reindeer;


@SuppressWarnings("deprecation")
public class TablesCssTest extends GridLayout { public class TablesCssTest extends GridLayout {


private TestSampler parent; private TestSampler parent;
createTableWith("Striped", ChameleonTheme.TABLE_STRIPED); createTableWith("Striped", ChameleonTheme.TABLE_STRIPED);
createTableWith("Strong", Reindeer.TABLE_STRONG); createTableWith("Strong", Reindeer.TABLE_STRONG);


parent.addReadOnlyChangeListener(event -> {
Iterator<Component> iterator = iterator();
while (iterator.hasNext()) {
Component c = iterator.next();
if (c instanceof Table) {
Table t = (Table) c;
t.setReadOnly(!t.isReadOnly());
}
}
});
} }


private void createTableWith(String caption, String primaryStyleName) { private void createTableWith(String caption, String primaryStyleName) {

+ 14
- 0
uitest/src/main/java/com/vaadin/tests/components/uitest/components/TextFieldsCssTest.java View File

package com.vaadin.tests.components.uitest.components; package com.vaadin.tests.components.uitest.components;


import java.util.Iterator;

import com.vaadin.tests.components.uitest.TestSampler; import com.vaadin.tests.components.uitest.TestSampler;
import com.vaadin.ui.AbstractField;
import com.vaadin.ui.Component; import com.vaadin.ui.Component;
import com.vaadin.ui.GridLayout; import com.vaadin.ui.GridLayout;
import com.vaadin.ui.PasswordField; import com.vaadin.ui.PasswordField;
import com.vaadin.v7.ui.themes.ChameleonTheme; import com.vaadin.v7.ui.themes.ChameleonTheme;
import com.vaadin.v7.ui.themes.Reindeer; import com.vaadin.v7.ui.themes.Reindeer;


@SuppressWarnings("deprecation")
public class TextFieldsCssTest extends GridLayout { public class TextFieldsCssTest extends GridLayout {


private TestSampler parent; private TestSampler parent;
rta.setId("textfield" + debugIdCounter++); rta.setId("textfield" + debugIdCounter++);
addComponent(rta, 0, 1, 6, 1); addComponent(rta, 0, 1, 6, 1);


parent.addReadOnlyChangeListener(event -> {
Iterator<Component> iterator = iterator();
while (iterator.hasNext()) {
Component c = iterator.next();
if (c instanceof AbstractField) {
AbstractField<?> af = (AbstractField<?>) c;
af.setReadOnly(!af.isReadOnly());
}
}
});
} }


private void createTextFieldWith(String caption, String primaryStyleName, private void createTextFieldWith(String caption, String primaryStyleName,

+ 4
- 0
uitest/src/main/java/com/vaadin/tests/components/uitest/components/TreeCssTest.java View File

import com.vaadin.v7.data.util.HierarchicalContainer; import com.vaadin.v7.data.util.HierarchicalContainer;
import com.vaadin.v7.ui.Tree; import com.vaadin.v7.ui.Tree;


@SuppressWarnings("deprecation")
public class TreeCssTest { public class TreeCssTest {
private int debugIdCounter = 0; private int debugIdCounter = 0;


} }


parent.addComponent(tree); parent.addComponent(tree);

parent.addReadOnlyChangeListener(
event -> tree.setReadOnly(!tree.isReadOnly()));
} }


private HierarchicalContainer createHierarchicalContainer() { private HierarchicalContainer createHierarchicalContainer() {

+ 5
- 0
uitest/src/main/java/com/vaadin/tests/components/uitest/components/TreeTableCssTest.java View File

import com.vaadin.v7.data.util.HierarchicalContainer; import com.vaadin.v7.data.util.HierarchicalContainer;
import com.vaadin.v7.ui.TreeTable; import com.vaadin.v7.ui.TreeTable;


@SuppressWarnings("deprecation")
public class TreeTableCssTest { public class TreeTableCssTest {
private int debugIdCounter = 0; private int debugIdCounter = 0;


TreeTable treeTable = new TreeTable(); TreeTable treeTable = new TreeTable();
treeTable.setId("treetable" + debugIdCounter++); treeTable.setId("treetable" + debugIdCounter++);
treeTable.setWidth("100%"); treeTable.setWidth("100%");
treeTable.setSelectable(true);
parent.addComponent(treeTable); parent.addComponent(treeTable);


HierarchicalContainer hc = createHierarchicalContainer(); HierarchicalContainer hc = createHierarchicalContainer();
for (Object itemId : treeTable.getItemIds()) { for (Object itemId : treeTable.getItemIds()) {
treeTable.setCollapsed(itemId, false); treeTable.setCollapsed(itemId, false);
} }

parent.addReadOnlyChangeListener(
event -> treeTable.setReadOnly(!treeTable.isReadOnly()));
} }


private HierarchicalContainer createHierarchicalContainer() { private HierarchicalContainer createHierarchicalContainer() {

Loading…
Cancel
Save