/* * This file is part of the Illarion project. * * Copyright © 2015 - Illarion e.V. * * Illarion is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Illarion is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ package illarion.client.gui.controller; import de.lessvoid.nifty.Nifty; import de.lessvoid.nifty.controls.Label; import de.lessvoid.nifty.controls.label.builder.LabelBuilder; import de.lessvoid.nifty.elements.Element; import de.lessvoid.nifty.input.NiftyInputEvent; import de.lessvoid.nifty.input.NiftyStandardInputEvent; import de.lessvoid.nifty.screen.KeyInputHandler; import de.lessvoid.nifty.screen.Screen; import de.lessvoid.nifty.screen.ScreenController; import illarion.client.util.Lang; import illarion.common.data.Credits; import illarion.common.data.CreditsList; import illarion.common.data.CreditsPerson; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.Iterator; /** * @author Martin Karing <nitram@illarion.org> */ public final class CreditsMultiScreenController implements ScreenController, KeyInputHandler { private Nifty nifty; private Screen screen; @Nullable private Element displayParent; @Nullable private Label titleLabel; private Element namesPanel; @Override public void bind(@Nonnull Nifty nifty, @Nonnull Screen screen) { this.nifty = nifty; this.screen = screen; displayParent = screen.findElementById("nameDisplay"); titleLabel = displayParent.findNiftyControl("title", Label.class); namesPanel = displayParent.findElementById("names"); } @Override public void onStartScreen() { Iterator<CreditsList> creditsIterator = Credits.getInstance().getMultiLists(); showNextEntry(creditsIterator); } private void showNextEntry(@Nonnull Iterator<CreditsList> iterator) { if (!iterator.hasNext()) { gotoNextScreen(); return; } CreditsList list = iterator.next(); if (Lang.getInstance().isGerman()) { titleLabel.setText(list.getNameGerman()); } else { titleLabel.setText(list.getNameEnglish()); } namesPanel.getChildren().forEach(Element::markForRemoval); for (CreditsPerson person : list) { LabelBuilder entry = new LabelBuilder(); entry.style("nifty-label"); entry.font("textFont"); entry.width("400px"); entry.text(person.getName()); entry.build(nifty, screen, namesPanel); } nifty.executeEndOfFrameElementActions(); displayParent.getParent().layoutElements(); displayParent.show(() -> displayParent.hide(() -> showNextEntry(iterator))); } private void gotoNextScreen() { nifty.gotoScreen("creditsEnd"); } @Override public void onEndScreen() { // nothing } @Override public boolean keyEvent(@Nonnull NiftyInputEvent inputEvent) { if (inputEvent == NiftyStandardInputEvent.Escape) { nifty.gotoScreen("login"); return true; } return false; } }