/*
* 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.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.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* @author Martin Karing <nitram@illarion.org>
*/
public final class CreditsSinglesScreenController implements ScreenController, KeyInputHandler {
private Nifty nifty;
@Nullable
private Element displayParent;
@Nullable
private Label titleLabel;
@Nullable
private Label nameLabel;
@Override
public void bind(@Nonnull Nifty nifty, @Nonnull Screen screen) {
this.nifty = nifty;
displayParent = screen.findElementById("nameDisplay");
titleLabel = displayParent.findNiftyControl("title", Label.class);
nameLabel = displayParent.findNiftyControl("name", Label.class);
}
@Override
public void onStartScreen() {
Iterator<CreditsList> creditsIterator = Credits.getInstance().getSingleLists();
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());
}
List<String> names = new ArrayList<>();
for (CreditsPerson person : list) {
names.add(person.getName());
}
StringBuilder builder = new StringBuilder();
int nameCount = names.size();
for (int i = 0; i < nameCount; i++) {
builder.append(names.get(i));
if (i < (nameCount - 2)) {
builder.append(", ");
} else if (i < (nameCount - 1)) {
if (Lang.getInstance().isGerman()) {
builder.append(" und ");
} else {
builder.append(" and ");
}
}
}
nameLabel.setText(builder.toString());
displayParent.layoutElements();
displayParent.show(() -> displayParent.hide(() -> showNextEntry(iterator)));
}
private void gotoNextScreen() {
nifty.gotoScreen("creditsMulti");
}
@Override
public void onEndScreen() {
// nothing
}
@Override
public boolean keyEvent(NiftyInputEvent inputEvent) {
if (inputEvent == NiftyStandardInputEvent.Escape) {
nifty.gotoScreen("login");
return true;
}
return false;
}
}