You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

CaptionsInLayoutsWaiAria.java 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. package com.vaadin.tests.layouts;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import com.vaadin.data.HasRequired;
  5. import com.vaadin.data.Item;
  6. import com.vaadin.data.Property.ValueChangeEvent;
  7. import com.vaadin.data.Property.ValueChangeListener;
  8. import com.vaadin.server.ThemeResource;
  9. import com.vaadin.server.UserError;
  10. import com.vaadin.tests.components.TestBase;
  11. import com.vaadin.ui.AbstractComponent;
  12. import com.vaadin.ui.Button;
  13. import com.vaadin.ui.Button.ClickEvent;
  14. import com.vaadin.ui.Button.ClickListener;
  15. import com.vaadin.ui.CheckBox;
  16. import com.vaadin.ui.ComboBox;
  17. import com.vaadin.ui.Component;
  18. import com.vaadin.ui.CssLayout;
  19. import com.vaadin.ui.DateField;
  20. import com.vaadin.ui.FormLayout;
  21. import com.vaadin.ui.GridLayout;
  22. import com.vaadin.ui.HorizontalLayout;
  23. import com.vaadin.ui.Layout;
  24. import com.vaadin.ui.NativeSelect;
  25. import com.vaadin.ui.OptionGroup;
  26. import com.vaadin.ui.TextArea;
  27. import com.vaadin.ui.VerticalLayout;
  28. import com.vaadin.v7.ui.LegacyPasswordField;
  29. import com.vaadin.v7.ui.LegacyTextField;
  30. public class CaptionsInLayoutsWaiAria extends TestBase {
  31. private static final Object CAPTION = "CAPTION";
  32. private static final Object CLASS = "C";
  33. private static final Object WIDTH = "W";
  34. private NativeSelect layoutSelect;
  35. private Layout layout;
  36. private VerticalLayout verticalLayout;
  37. private HorizontalLayout horizontalLayout;
  38. private GridLayout gridLayout;
  39. private FormLayout formLayout;
  40. private List<AbstractComponent> components = new ArrayList<>();
  41. private CssLayout cssLayout;
  42. private HorizontalLayout layoutParent = new HorizontalLayout();
  43. @Override
  44. protected void setup() {
  45. // setTheme("tests-tickets");
  46. addComponent(createLayoutSelect());
  47. addComponent(toggleRequired());
  48. // addComponent(toggleCaptions());
  49. // addComponent(toggleError());
  50. addComponent(toggleIcon());
  51. addComponent(toggleReadOnly());
  52. addComponent(toggleInvalid());
  53. addComponent(toggleEnabled());
  54. addComponent(addCaptionText());
  55. // layoutParent.addComponent(new
  56. // NativeButton("Button right of layout"));
  57. addComponent(layoutParent);
  58. // addComponent(new NativeButton("Button below layout"));
  59. createComponents();
  60. layoutSelect.setValue(layoutSelect.getItemIds().iterator().next());
  61. }
  62. private Component addCaptionText() {
  63. Button b = new Button("Add caption text");
  64. b.addListener(new ClickListener() {
  65. @Override
  66. public void buttonClick(ClickEvent event) {
  67. prependCaptions("a");
  68. }
  69. });
  70. return b;
  71. }
  72. protected void prependCaptions(String prepend) {
  73. for (Component c : components) {
  74. c.setCaption(prepend + c.getCaption());
  75. }
  76. }
  77. private Component toggleRequired() {
  78. CheckBox requiredToggle = new CheckBox();
  79. requiredToggle.setImmediate(true);
  80. requiredToggle.setCaption("Required");
  81. requiredToggle
  82. .addValueChangeListener(event -> setRequired(event.getValue()));
  83. return requiredToggle;
  84. }
  85. private Component toggleIcon() {
  86. CheckBox iconToggle = new CheckBox();
  87. iconToggle.setImmediate(true);
  88. iconToggle.setCaption("Icons");
  89. iconToggle.addValueChangeListener(event -> setIcon(event.getValue()));
  90. return iconToggle;
  91. }
  92. private Component toggleReadOnly() {
  93. CheckBox readOnlyToggle = new CheckBox();
  94. readOnlyToggle.setImmediate(true);
  95. readOnlyToggle.setCaption("Read only");
  96. readOnlyToggle
  97. .addValueChangeListener(event -> setReadOnly(event.getValue()));
  98. return readOnlyToggle;
  99. }
  100. private Component toggleEnabled() {
  101. CheckBox enabledToggle = new CheckBox();
  102. enabledToggle.setImmediate(true);
  103. enabledToggle.setValue(true);
  104. enabledToggle.setCaption("Enabled");
  105. enabledToggle
  106. .addValueChangeListener(event -> setEnabled(event.getValue()));
  107. return enabledToggle;
  108. }
  109. private Component toggleInvalid() {
  110. CheckBox invalid = new CheckBox("Invalid");
  111. invalid.setImmediate(true);
  112. invalid.addValueChangeListener(event -> setInvalid(event.getValue()));
  113. return invalid;
  114. }
  115. protected void setInvalid(boolean value) {
  116. UserError userError = null;
  117. if (value) {
  118. userError = new UserError(
  119. "Der eingegebene Wert ist nicht zulässig!");
  120. }
  121. for (AbstractComponent c : components) {
  122. c.setComponentError(userError);
  123. }
  124. }
  125. protected void setRequired(boolean value) {
  126. for (AbstractComponent c : components) {
  127. if (c instanceof HasRequired) {
  128. ((HasRequired) c).setRequired(value);
  129. }
  130. }
  131. }
  132. protected void setIcon(boolean value) {
  133. for (Component c : components) {
  134. if (!value) {
  135. c.setIcon(null);
  136. } else {
  137. c.setIcon(new ThemeResource("../runo/icons/16/ok.png"));
  138. }
  139. }
  140. }
  141. protected void setReadOnly(boolean value) {
  142. for (Component c : components) {
  143. c.setReadOnly(value);
  144. }
  145. }
  146. protected void setEnabled(boolean value) {
  147. for (Component c : components) {
  148. c.setEnabled(value);
  149. }
  150. }
  151. private Component toggleError() {
  152. CheckBox errorToggle = new CheckBox();
  153. errorToggle.setImmediate(true);
  154. errorToggle.setCaption("Error");
  155. errorToggle.addValueChangeListener(event -> setError(event.getValue()));
  156. return errorToggle;
  157. }
  158. protected void setError(boolean value) {
  159. for (AbstractComponent c : components) {
  160. if (value) {
  161. c.setComponentError(new UserError("error"));
  162. } else {
  163. c.setComponentError(null);
  164. }
  165. }
  166. }
  167. private void createComponents() {
  168. components.add(new LegacyTextField("Default TextBox"));
  169. components.add(new TextArea("Default TextArea."));
  170. // components.add(new RichTextArea("Default RichtTextArea"));
  171. components.add(new LegacyPasswordField("Default Password"));
  172. components.add(new DateField("Default DateField"));
  173. // PopupDateField popupDateField = new
  174. // PopupDateField("Default DateField");
  175. // popupDateField.setTextFieldEnabled(false);
  176. // components.add(popupDateField);
  177. components.add(new CheckBox("Default CheckBox"));
  178. ComboBox comboBox = new ComboBox("Default ComboBox");
  179. comboBox.addItem("Item1");
  180. components.add(comboBox);
  181. OptionGroup radioGroup = new OptionGroup("Single Items");
  182. radioGroup.addItem("Single Item 1");
  183. radioGroup.addItem("Single Item 2");
  184. radioGroup.setMultiSelect(false);
  185. components.add(radioGroup);
  186. OptionGroup checkGroup = new OptionGroup("Multi Items");
  187. checkGroup.addItem("Multi Item 1");
  188. checkGroup.addItem("Multi Item 2");
  189. checkGroup.setMultiSelect(true);
  190. components.add(checkGroup);
  191. // Tree tree = new Tree();
  192. // tree.setCaption("tree");
  193. // tree.addItem("single item");
  194. // components.add(tree);
  195. }
  196. private void setLayout(Layout newLayout) {
  197. if (layout == null) {
  198. layoutParent.addComponent(newLayout, 0);
  199. } else {
  200. layoutParent.replaceComponent(layout, newLayout);
  201. }
  202. layout = newLayout;
  203. for (Component c : components) {
  204. if (c.getParent() != layout) {
  205. layout.addComponent(c);
  206. }
  207. }
  208. }
  209. private Layout getLayout(String caption,
  210. Class<? extends Layout> layoutClass, String width) {
  211. Layout l;
  212. if (layoutClass == VerticalLayout.class) {
  213. if (verticalLayout == null) {
  214. verticalLayout = new VerticalLayout();
  215. verticalLayout.setStyleName("borders");
  216. }
  217. l = verticalLayout;
  218. } else if (layoutClass == HorizontalLayout.class) {
  219. if (horizontalLayout == null) {
  220. horizontalLayout = new HorizontalLayout();
  221. horizontalLayout.setStyleName("borders");
  222. }
  223. l = horizontalLayout;
  224. } else if (layoutClass == GridLayout.class) {
  225. if (gridLayout == null) {
  226. gridLayout = new GridLayout();
  227. gridLayout.setStyleName("borders");
  228. }
  229. l = gridLayout;
  230. } else if (layoutClass == CssLayout.class) {
  231. if (cssLayout == null) {
  232. cssLayout = new CssLayout();
  233. cssLayout.setStyleName("borders");
  234. }
  235. l = cssLayout;
  236. } else if (layoutClass == FormLayout.class) {
  237. if (formLayout == null) {
  238. formLayout = new FormLayout();
  239. formLayout.setStyleName("borders");
  240. }
  241. l = formLayout;
  242. } else {
  243. return null;
  244. }
  245. l.setCaption(caption);
  246. if (width.equals("auto")) {
  247. width = null;
  248. }
  249. l.setWidth(width);
  250. // addComponent(l);
  251. return l;
  252. }
  253. private Component createLayoutSelect() {
  254. layoutSelect = new NativeSelect("Layout");
  255. layoutSelect.addContainerProperty(CAPTION, String.class, "");
  256. layoutSelect.addContainerProperty(CLASS, Class.class, "");
  257. layoutSelect.addContainerProperty(WIDTH, String.class, "");
  258. layoutSelect.setItemCaptionPropertyId(CAPTION);
  259. layoutSelect.setNullSelectionAllowed(false);
  260. for (Class<?> cls : new Class[] { HorizontalLayout.class,
  261. VerticalLayout.class, GridLayout.class, CssLayout.class,
  262. FormLayout.class }) {
  263. for (String width : new String[] { "auto" }) {
  264. Object id = layoutSelect.addItem();
  265. Item i = layoutSelect.getItem(id);
  266. i.getItemProperty(CAPTION)
  267. .setValue(cls.getSimpleName() + ", " + width);
  268. i.getItemProperty(CLASS).setValue(cls);
  269. i.getItemProperty(WIDTH).setValue(width);
  270. }
  271. }
  272. layoutSelect.setImmediate(true);
  273. layoutSelect.addListener(new ValueChangeListener() {
  274. @Override
  275. @SuppressWarnings("unchecked")
  276. public void valueChange(ValueChangeEvent event) {
  277. Item i = layoutSelect.getItem(event.getProperty().getValue());
  278. setLayout(getLayout(
  279. (String) i.getItemProperty(CAPTION).getValue(),
  280. (Class<? extends Layout>) i.getItemProperty(CLASS)
  281. .getValue(),
  282. (String) i.getItemProperty(WIDTH).getValue()));
  283. }
  284. });
  285. return layoutSelect;
  286. }
  287. @Override
  288. protected String getDescription() {
  289. return "Tests what happens when the caption changes in various layouts. Behavior should be consistent.";
  290. }
  291. @Override
  292. protected Integer getTicketNumber() {
  293. return 5424;
  294. }
  295. }