
de.lessvoid.nifty.controls.radiobutton.RadioButtonGroupControl Maven / Gradle / Ivy
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