All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.lessvoid.nifty.controls.radiobutton.RadioButtonGroupControl Maven / Gradle / Ivy

There is a newer version: 1.4.3
Show newest version
package de.lessvoid.nifty.controls.radiobutton;

import de.lessvoid.nifty.Nifty;
import de.lessvoid.nifty.controls.AbstractController;
import de.lessvoid.nifty.controls.Parameters;
import de.lessvoid.nifty.controls.RadioButtonGroup;
import de.lessvoid.nifty.controls.RadioButtonGroupStateChangedEvent;
import de.lessvoid.nifty.elements.Element;
import de.lessvoid.nifty.elements.events.ElementDisableEvent;
import de.lessvoid.nifty.elements.events.ElementEnableEvent;
import de.lessvoid.nifty.input.NiftyInputEvent;
import de.lessvoid.nifty.screen.Screen;
import org.bushe.swing.event.EventTopicSubscriber;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

/**
 * RadioButtonGroupControl implementation.
 *
 * @deprecated Please use {@link de.lessvoid.nifty.controls.RadioButtonGroup} when accessing NiftyControls.
 */
@Deprecated
public class RadioButtonGroupControl extends AbstractController implements RadioButtonGroup {
  @Nonnull
  private static final Logger log = Logger.getLogger(RadioButtonGroupControl.class.getName());
  @Nullable
  private Nifty nifty;
  @Nullable
  private Screen screen;
  @Nullable
  private RadioButtonControl activeButton;
  @Nonnull
  private final List registeredRadioButtons;
  private boolean allowDeselection = false;  // by default we don't allow deselection

  public RadioButtonGroupControl() {
    registeredRadioButtons = new ArrayList();
  }

  @Override
  public void bind(
      @Nonnull final Nifty nifty,
      @Nonnull final Screen screen,
      @Nonnull final Element element,
      @Nonnull final Parameters parameter) {
    bind(element);
    this.nifty = nifty;
    this.screen = screen;
    this.allowDeselection = parameter.getAsBoolean("allowDeselection", false);
  }

  @Override
  public void onStartScreen() {
    if (nifty == null || screen == null) {
      log.severe("Can't subscribe to the required events while the control is not bound.");
      return;
    }
    String id = getId();
    if (id == null) {
      log.warning("Radio group has no id, functionality will be severely limited.");
      return;
    }
    nifty.subscribe(screen, id, ElementDisableEvent.class,
        new EventTopicSubscriber() {
          @Override
          public void onEvent(final String topic, final ElementDisableEvent disableEvent) {
            enableAllRadioButtons(false);
          }
        });
    nifty.subscribe(screen, id, ElementEnableEvent.class,
        new EventTopicSubscriber() {
          @Override
          public void onEvent(final String topic, final ElementEnableEvent disableEvent) {
            enableAllRadioButtons(true);
          }
        });
    nifty.publishEvent(id, new RadioButtonGroupStateChangedEvent(activeButton, null));
  }

  @Override
  public boolean inputEvent(@Nonnull final NiftyInputEvent inputEvent) {
    return false;
  }

  public void registerRadioButton(@Nonnull final RadioButtonControl radioButtonControl) {
    registeredRadioButtons.add(radioButtonControl);
    if (activeButton == null) {
      onRadioButtonClick(registeredRadioButtons.get(0));
    }
  }

  public void onRadioButtonClick(@Nonnull final RadioButtonControl clickedRadioButton) {
    if (activeButton == clickedRadioButton) {
      if (!allowDeselection) {
        return;
      }
      clickedRadioButton.deactivate();

      String id = getId();
      if (id != null && nifty != null) {
        nifty.publishEvent(id, new RadioButtonGroupStateChangedEvent(null, activeButton));
      }
      activeButton = null;
      return;
    }
    if (activeButton != null) {
      activeButton.deactivate();
    }
    clickedRadioButton.activate();
    String id = getId();
    if (id != null && nifty != null) {
      nifty.publishEvent(id, new RadioButtonGroupStateChangedEvent(clickedRadioButton, activeButton));
    }
    activeButton = clickedRadioButton;
  }

  @Override
  public void allowDeselection(final boolean allowDeselection) {
    this.allowDeselection = allowDeselection;
    if (!allowDeselection) {
      if (!registeredRadioButtons.isEmpty()) {
        onRadioButtonClick(registeredRadioButtons.get(0));
      }
    }
  }

  private void enableAllRadioButtons(final boolean enabled) {
    for (int i = 0; i < registeredRadioButtons.size(); i++) {
      registeredRadioButtons.get(i).setEnabled(enabled);
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy