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

de.lessvoid.nifty.controls.listbox.ListBoxPanel Maven / Gradle / Ivy

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

import de.lessvoid.nifty.Nifty;
import de.lessvoid.nifty.controls.AbstractController;
import de.lessvoid.nifty.controls.FocusHandler;
import de.lessvoid.nifty.controls.Parameters;
import de.lessvoid.nifty.elements.Element;
import de.lessvoid.nifty.input.NiftyInputEvent;
import de.lessvoid.nifty.input.NiftyStandardInputEvent;
import de.lessvoid.nifty.screen.Screen;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;

public class ListBoxPanel extends AbstractController {
  @Nullable
  private FocusHandler focusHandler;
  @Nullable
  private ListBoxImpl listBox;
  private boolean hasFocus = false;

  @Override
  public void bind(
      @Nonnull final Nifty nifty,
      @Nonnull final Screen screen,
      @Nonnull final Element element,
      @Nonnull final Parameters parameter) {
    bind(element);
    focusHandler = screen.getFocusHandler();
  }

  @Override
  public void onStartScreen() {
  }

  @Override
  public boolean inputEvent(@Nonnull final NiftyInputEvent inputEvent) {
    Element element = getElement();
    if (inputEvent == NiftyStandardInputEvent.NextInputElement) {
      if (focusHandler != null && element != null) {
        Element nextElement = focusHandler.getNext(element);
        nextElement.setFocus();
        return true;
      }
    } else if (inputEvent == NiftyStandardInputEvent.PrevInputElement) {
      if (focusHandler != null && element != null) {
        Element prevElement = focusHandler.getPrev(element);
        prevElement.setFocus();
        return true;
      }
    } else if (inputEvent == NiftyStandardInputEvent.MoveCursorDown) {
      if (hasElements()) {
        assert listBox != null; // has elements checks this
        int focusItemIndex = listBox.getFocusItemIndex();
        if (focusItemIndex < listBox.itemCount() - 1) {
          listBox.setFocusItemByIndex(focusItemIndex + 1);
          return true;
        }
      }
    } else if (inputEvent == NiftyStandardInputEvent.MoveCursorUp) {
      if (hasElements()) {
        assert listBox != null; // has elements checks this
        int focusItemIndex = listBox.getFocusItemIndex();
        if (focusItemIndex > 0) {
          listBox.setFocusItemByIndex(focusItemIndex - 1);
          return true;
        }
      }
    } else if (inputEvent == NiftyStandardInputEvent.Activate) {
      if (hasElements()) {
        assert listBox != null; // has elements checks this
        int focusItemIndex = listBox.getFocusItemIndex();
        if (focusItemIndex >= 0) {
          if (listBox.getSelection().contains(listBox.getFocusItem())) {
            listBox.deselectItemByIndex(focusItemIndex);
          } else {
            listBox.selectItemByIndex(focusItemIndex);
          }
        }
      }
    }
    return false;
  }

  private boolean hasElements() {
    return listBox != null && listBox.itemCount() > 0;
  }

  @Override
  public void onFocus(final boolean getFocus) {
    super.onFocus(getFocus);

    hasFocus = getFocus;
    if (listBox != null) {
      listBox.updateView();
    }
  }

  public void setListBox(@Nullable final ListBoxImpl listBox) {
    this.listBox = listBox;
  }

  @Override
  public boolean hasFocus() {
    return hasFocus;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy