Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

VFormPaintable.java 6.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. /*
  2. @VaadinApache2LicenseForJavaFiles@
  3. */
  4. package com.vaadin.terminal.gwt.client.ui;
  5. import com.google.gwt.core.client.GWT;
  6. import com.google.gwt.dom.client.Style.Unit;
  7. import com.google.gwt.event.dom.client.KeyDownEvent;
  8. import com.google.gwt.user.client.ui.Widget;
  9. import com.vaadin.terminal.gwt.client.ApplicationConnection;
  10. import com.vaadin.terminal.gwt.client.UIDL;
  11. import com.vaadin.terminal.gwt.client.ConnectorMap;
  12. import com.vaadin.terminal.gwt.client.ComponentConnector;
  13. public class VFormPaintable extends AbstractComponentContainerConnector implements
  14. SimpleManagedLayout {
  15. @Override
  16. public void init() {
  17. VForm form = getWidget();
  18. getLayoutManager().registerDependency(this, form.footerContainer);
  19. }
  20. @Override
  21. protected boolean delegateCaptionHandling() {
  22. return false;
  23. }
  24. @Override
  25. public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
  26. getWidget().client = client;
  27. getWidget().id = uidl.getId();
  28. super.updateFromUIDL(uidl, client);
  29. if (!isRealUpdate(uidl)) {
  30. return;
  31. }
  32. boolean legendEmpty = true;
  33. if (getState().getCaption() != null) {
  34. getWidget().caption.setInnerText(getState()
  35. .getCaption());
  36. legendEmpty = false;
  37. } else {
  38. getWidget().caption.setInnerText("");
  39. }
  40. if (uidl.hasAttribute(ATTRIBUTE_ICON)) {
  41. if (getWidget().icon == null) {
  42. getWidget().icon = new Icon(client);
  43. getWidget().legend
  44. .insertFirst(getWidget().icon.getElement());
  45. }
  46. getWidget().icon.setUri(uidl
  47. .getStringAttribute(ATTRIBUTE_ICON));
  48. legendEmpty = false;
  49. } else {
  50. if (getWidget().icon != null) {
  51. getWidget().legend
  52. .removeChild(getWidget().icon.getElement());
  53. }
  54. }
  55. if (legendEmpty) {
  56. getWidget().addStyleDependentName("nocaption");
  57. } else {
  58. getWidget().removeStyleDependentName("nocaption");
  59. }
  60. if (uidl.hasAttribute("error")) {
  61. final UIDL errorUidl = uidl.getErrors();
  62. getWidget().errorMessage.updateFromUIDL(errorUidl);
  63. getWidget().errorMessage.setVisible(true);
  64. } else {
  65. getWidget().errorMessage.setVisible(false);
  66. }
  67. if (getState().hasDescription()) {
  68. getWidget().desc.setInnerHTML(getState()
  69. .getDescription());
  70. if (getWidget().desc.getParentElement() == null) {
  71. getWidget().fieldSet.insertAfter(
  72. getWidget().desc,
  73. getWidget().legend);
  74. }
  75. } else {
  76. getWidget().desc.setInnerHTML("");
  77. if (getWidget().desc.getParentElement() != null) {
  78. getWidget().fieldSet
  79. .removeChild(getWidget().desc);
  80. }
  81. }
  82. // first render footer so it will be easier to handle relative height of
  83. // main layout
  84. if (uidl.getChildCount() > 1
  85. && !uidl.getChildUIDL(1).getTag().equals("actions")) {
  86. // render footer
  87. ComponentConnector newFooter = client.getPaintable(uidl
  88. .getChildUIDL(1));
  89. Widget newFooterWidget = newFooter.getWidget();
  90. if (getWidget().footer == null) {
  91. getWidget().add(newFooter.getWidget(),
  92. getWidget().footerContainer);
  93. getWidget().footer = newFooterWidget;
  94. } else if (newFooter != getWidget().footer) {
  95. getWidget().remove(getWidget().footer);
  96. client.unregisterPaintable(ConnectorMap.get(getConnection())
  97. .getConnector(getWidget().footer));
  98. getWidget().add(newFooter.getWidget(),
  99. getWidget().footerContainer);
  100. }
  101. getWidget().footer = newFooterWidget;
  102. newFooter.updateFromUIDL(uidl.getChildUIDL(1), client);
  103. } else {
  104. if (getWidget().footer != null) {
  105. getWidget().remove(getWidget().footer);
  106. client.unregisterPaintable(ConnectorMap.get(getConnection())
  107. .getConnector(getWidget().footer));
  108. }
  109. }
  110. final UIDL layoutUidl = uidl.getChildUIDL(0);
  111. ComponentConnector newLayout = client.getPaintable(layoutUidl);
  112. Widget newLayoutWidget = newLayout.getWidget();
  113. if (getWidget().lo == null) {
  114. // Layout not rendered before
  115. getWidget().lo = newLayoutWidget;
  116. getWidget().add(newLayoutWidget,
  117. getWidget().fieldContainer);
  118. } else if (getWidget().lo != newLayoutWidget) {
  119. // Layout has changed
  120. client.unregisterPaintable(ConnectorMap.get(getConnection())
  121. .getConnector(getWidget().lo));
  122. getWidget().remove(getWidget().lo);
  123. getWidget().lo = newLayoutWidget;
  124. getWidget().add(newLayoutWidget,
  125. getWidget().fieldContainer);
  126. }
  127. newLayout.updateFromUIDL(layoutUidl, client);
  128. // also recalculates size of the footer if undefined size form - see
  129. // #3710
  130. client.runDescendentsLayout(getWidget());
  131. // We may have actions attached
  132. if (uidl.getChildCount() > 1) {
  133. UIDL childUidl = uidl.getChildByTagName("actions");
  134. if (childUidl != null) {
  135. if (getWidget().shortcutHandler == null) {
  136. getWidget().shortcutHandler = new ShortcutActionHandler(
  137. getId(), client);
  138. getWidget().keyDownRegistration = getWidget()
  139. .addDomHandler(getWidget(),
  140. KeyDownEvent.getType());
  141. }
  142. getWidget().shortcutHandler
  143. .updateActionMap(childUidl);
  144. }
  145. } else if (getWidget().shortcutHandler != null) {
  146. getWidget().keyDownRegistration.removeHandler();
  147. getWidget().shortcutHandler = null;
  148. getWidget().keyDownRegistration = null;
  149. }
  150. }
  151. public void updateCaption(ComponentConnector component, UIDL uidl) {
  152. // NOP form don't render caption for neither field layout nor footer
  153. // layout
  154. }
  155. @Override
  156. public VForm getWidget() {
  157. return (VForm) super.getWidget();
  158. }
  159. @Override
  160. protected Widget createWidget() {
  161. return GWT.create(VForm.class);
  162. }
  163. public void layout() {
  164. VForm form = getWidget();
  165. int footerHeight = getLayoutManager().getOuterHeight(
  166. form.footerContainer);
  167. form.fieldContainer.getStyle().setPaddingBottom(footerHeight, Unit.PX);
  168. form.footerContainer.getStyle().setMarginTop(-footerHeight, Unit.PX);
  169. }
  170. }