public static Property checkbox()

in gwt-util/src/main/java/jetbrains/jetpad/mapper/gwt/DomUtil.java [145:205]


  public static Property<Boolean> checkbox(final InputElement element) {
    return new Property<Boolean>() {
      private Registration myTimerRegistration;
      private Listeners<EventHandler<? super PropertyChangeEvent<Boolean>>> myListeners = new Listeners<>();

      @Override
      public Boolean get() {
        return element.isChecked();
      }

      @Override
      public void set(Boolean value) {
        element.setChecked(value);
      }

      @Override
      public Registration addHandler(EventHandler<? super PropertyChangeEvent<Boolean>> handler) {
        if (myListeners.isEmpty()) {
          final Value<Boolean> value = new Value<>(element.isChecked());
          final Timer timer = new Timer() {
            @Override
            public void run() {
              final boolean currentValue = element.isChecked();
              if (currentValue != value.get()) {
                myListeners.fire(new ListenerCaller<EventHandler<? super PropertyChangeEvent<Boolean>>>() {
                  @Override
                  public void call(EventHandler<? super PropertyChangeEvent<Boolean>> l) {
                    l.onEvent(new PropertyChangeEvent<>(value.get(), currentValue));
                  }
                });
                value.set(currentValue);
              }
            }
          };
          timer.scheduleRepeating(100);
          myTimerRegistration = new Registration() {
            @Override
            protected void doRemove() {
              timer.cancel();
            }
          };
        }
        final Registration reg = myListeners.add(handler);
        return new Registration() {
          @Override
          protected void doRemove() {
            reg.remove();
            if (myListeners.isEmpty()) {
              myTimerRegistration.remove();
              myTimerRegistration = null;
            }
          }
        };
      }

      @Override
      public String getPropExpr() {
        return "checkbox(" + element + ")";
      }
    };
  }