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.

IForm.java 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. /*
  2. @ITMillApache2LicenseForJavaFiles@
  3. */
  4. package com.itmill.toolkit.terminal.gwt.client.ui;
  5. import com.google.gwt.user.client.DOM;
  6. import com.google.gwt.user.client.Element;
  7. import com.google.gwt.user.client.ui.ComplexPanel;
  8. import com.google.gwt.user.client.ui.Widget;
  9. import com.itmill.toolkit.terminal.gwt.client.ApplicationConnection;
  10. import com.itmill.toolkit.terminal.gwt.client.Container;
  11. import com.itmill.toolkit.terminal.gwt.client.ContainerResizedListener;
  12. import com.itmill.toolkit.terminal.gwt.client.IErrorMessage;
  13. import com.itmill.toolkit.terminal.gwt.client.Paintable;
  14. import com.itmill.toolkit.terminal.gwt.client.UIDL;
  15. import com.itmill.toolkit.terminal.gwt.client.Util;
  16. public class IForm extends ComplexPanel implements Paintable,
  17. ContainerResizedListener {
  18. public static final String CLASSNAME = "i-form";
  19. private Container lo;
  20. private Element legend = DOM.createLegend();
  21. private Element caption = DOM.createSpan();
  22. private Element errorIndicatorElement = DOM.createDiv();
  23. private Element desc = DOM.createDiv();
  24. private Icon icon;
  25. private IErrorMessage errorMessage = new IErrorMessage();
  26. private Element fieldContainer = DOM.createDiv();
  27. private Element footerContainer = DOM.createDiv();
  28. private Container footer;
  29. public IForm() {
  30. setElement(DOM.createFieldSet());
  31. setStyleName(CLASSNAME);
  32. DOM.appendChild(getElement(), legend);
  33. DOM.appendChild(legend, caption);
  34. DOM.setElementProperty(errorIndicatorElement, "className",
  35. "i-errorindicator");
  36. DOM.setStyleAttribute(errorIndicatorElement, "display", "none");
  37. DOM.setInnerText(errorIndicatorElement, " "); // needed for IE
  38. DOM.setElementProperty(desc, "className", "i-form-description");
  39. DOM.appendChild(getElement(), desc);
  40. DOM.appendChild(getElement(), fieldContainer);
  41. errorMessage.setVisible(false);
  42. errorMessage.setStyleName(CLASSNAME + "-errormessage");
  43. DOM.appendChild(getElement(), errorMessage.getElement());
  44. DOM.appendChild(getElement(), footerContainer);
  45. }
  46. public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
  47. if (client.updateComponent(this, uidl, false)) {
  48. return;
  49. }
  50. boolean legendEmpty = true;
  51. if (uidl.hasAttribute("caption")) {
  52. DOM.setInnerText(caption, uidl.getStringAttribute("caption"));
  53. legendEmpty = false;
  54. } else {
  55. DOM.setInnerText(caption, "");
  56. }
  57. if (uidl.hasAttribute("icon")) {
  58. if (icon == null) {
  59. icon = new Icon(client);
  60. DOM.insertChild(legend, icon.getElement(), 0);
  61. }
  62. icon.setUri(uidl.getStringAttribute("icon"));
  63. legendEmpty = false;
  64. } else {
  65. if (icon != null) {
  66. DOM.removeChild(legend, icon.getElement());
  67. }
  68. }
  69. if (legendEmpty) {
  70. DOM.setStyleAttribute(legend, "display", "none");
  71. } else {
  72. DOM.setStyleAttribute(legend, "display", "");
  73. }
  74. if (uidl.hasAttribute("error")) {
  75. final UIDL errorUidl = uidl.getErrors();
  76. errorMessage.updateFromUIDL(errorUidl);
  77. errorMessage.setVisible(true);
  78. } else {
  79. errorMessage.setVisible(false);
  80. }
  81. if (uidl.hasAttribute("description")) {
  82. DOM.setInnerHTML(desc, uidl.getStringAttribute("description"));
  83. } else {
  84. DOM.setInnerHTML(desc, "");
  85. }
  86. iLayout();
  87. final UIDL layoutUidl = uidl.getChildUIDL(0);
  88. Container newLo = (Container) client.getPaintable(layoutUidl);
  89. if (lo == null) {
  90. lo = newLo;
  91. add((Widget) lo, fieldContainer);
  92. } else if (lo != newLo) {
  93. client.unregisterPaintable(lo);
  94. remove((Widget) lo);
  95. lo = newLo;
  96. add((Widget) lo, fieldContainer);
  97. }
  98. lo.updateFromUIDL(layoutUidl, client);
  99. if (uidl.getChildCount() > 1) {
  100. // render footer
  101. Container newFooter = (Container) client.getPaintable(uidl
  102. .getChildUIDL(1));
  103. if (footer == null) {
  104. add((Widget) newFooter, footerContainer);
  105. footer = newFooter;
  106. } else if (newFooter != footer) {
  107. remove((Widget) footer);
  108. client.unregisterPaintable(footer);
  109. add((Widget) newFooter, footerContainer);
  110. }
  111. footer = newFooter;
  112. footer.updateFromUIDL(uidl.getChildUIDL(1), client);
  113. } else {
  114. if (footer != null) {
  115. remove((Widget) footer);
  116. client.unregisterPaintable(footer);
  117. }
  118. }
  119. }
  120. public void iLayout() {
  121. Util.runDescendentsLayout(this);
  122. }
  123. }