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.

VProgressIndicator.java 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /*
  2. @ITMillApache2LicenseForJavaFiles@
  3. */
  4. package com.vaadin.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.Timer;
  8. import com.google.gwt.user.client.ui.Widget;
  9. import com.vaadin.terminal.gwt.client.ApplicationConnection;
  10. import com.vaadin.terminal.gwt.client.Paintable;
  11. import com.vaadin.terminal.gwt.client.UIDL;
  12. public class VProgressIndicator extends Widget implements Paintable {
  13. private static final String CLASSNAME = "i-progressindicator";
  14. Element wrapper = DOM.createDiv();
  15. Element indicator = DOM.createDiv();
  16. private ApplicationConnection client;
  17. private final Poller poller;
  18. private boolean indeterminate = false;
  19. private boolean pollerSuspendedDueDetach;
  20. public VProgressIndicator() {
  21. setElement(DOM.createDiv());
  22. getElement().appendChild(wrapper);
  23. setStyleName(CLASSNAME);
  24. wrapper.appendChild(indicator);
  25. indicator.setClassName(CLASSNAME + "-indicator");
  26. wrapper.setClassName(CLASSNAME + "-wrapper");
  27. poller = new Poller();
  28. }
  29. public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
  30. if (client.updateComponent(this, uidl, true)) {
  31. return;
  32. }
  33. poller.cancel();
  34. this.client = client;
  35. if (client.updateComponent(this, uidl, true)) {
  36. return;
  37. }
  38. indeterminate = uidl.getBooleanAttribute("indeterminate");
  39. if (indeterminate) {
  40. String basename = CLASSNAME + "-indeterminate";
  41. VProgressIndicator.setStyleName(getElement(), basename, true);
  42. VProgressIndicator.setStyleName(getElement(), basename
  43. + "-disabled", uidl.getBooleanAttribute("disabled"));
  44. } else {
  45. try {
  46. final float f = Float.parseFloat(uidl
  47. .getStringAttribute("state"));
  48. final int size = Math.round(100 * f);
  49. DOM.setStyleAttribute(indicator, "width", size + "%");
  50. } catch (final Exception e) {
  51. }
  52. }
  53. if (!uidl.getBooleanAttribute("disabled")) {
  54. poller.scheduleRepeating(uidl.getIntAttribute("pollinginterval"));
  55. }
  56. }
  57. @Override
  58. protected void onAttach() {
  59. super.onAttach();
  60. if (pollerSuspendedDueDetach) {
  61. poller.run();
  62. }
  63. }
  64. @Override
  65. protected void onDetach() {
  66. super.onDetach();
  67. poller.cancel();
  68. pollerSuspendedDueDetach = true;
  69. }
  70. @Override
  71. public void setVisible(boolean visible) {
  72. super.setVisible(visible);
  73. if (!visible) {
  74. poller.cancel();
  75. }
  76. }
  77. class Poller extends Timer {
  78. @Override
  79. public void run() {
  80. client.sendPendingVariableChanges();
  81. }
  82. }
  83. }