
de.lessvoid.nifty.controls.chatcontrol.ChatBoxViewConverter Maven / Gradle / Ivy
package de.lessvoid.nifty.controls.chatcontrol;
import java.util.logging.Logger;
import javax.annotation.Nonnull;
import de.lessvoid.nifty.controls.ListBox.ListBoxViewConverter;
import de.lessvoid.nifty.elements.Element;
import de.lessvoid.nifty.elements.render.ImageRenderer;
import de.lessvoid.nifty.elements.render.TextRenderer;
/**
* Handles the displaying of the items in the ChatBox.
*
* @author Mark
* @version 0.1
*/
public class ChatBoxViewConverter implements ListBoxViewConverter {
@Nonnull
private static final Logger log = Logger.getLogger(ChatBoxViewConverter.class.getName());
@Nonnull
private static final String CHAT_LINE_ICON = "#chat-line-icon";
@Nonnull
private static final String CHAT_LINE_TEXT = "#chat-line-text";
/**
* Default constructor.
*/
public ChatBoxViewConverter() {
}
@Override
public final void display(@Nonnull final Element listBoxItem, @Nonnull final ChatEntryModelClass item) {
final Element text = listBoxItem.findElementById(CHAT_LINE_TEXT);
if (text == null) {
log.severe("Failed to locate text part of chat line! Can't display entry.");
return;
}
final Element icon = listBoxItem.findElementById(CHAT_LINE_ICON);
if (icon == null) {
log.severe("Failed to locate icon part of chat line! Can't display entry.");
return;
}
final TextRenderer textRenderer = text.getRenderer(TextRenderer.class);
if (textRenderer == null) {
log.severe("Text entry of the chat line does not contain the required text renderer.");
return;
}
final ImageRenderer iconRenderer = icon.getRenderer(ImageRenderer.class);
if (iconRenderer == null) {
log.severe("Icon entry of the chat line does not contain the required image renderer.");
return;
}
if (item.getStyle() != null && !item.getStyle().equals("")) {
text.setStyle(item.getStyle());
} else {
text.setStyle("default");
}
// setStyle will reset the text to initial value (null), so setText/setImage should be called after it
textRenderer.setText(item.toString());
iconRenderer.setImage(item.getIcon());
}
@Override
public final int getWidth(@Nonnull final Element listBoxItem, @Nonnull final ChatEntryModelClass item) {
final Element text = listBoxItem.findElementById(CHAT_LINE_TEXT);
if (text == null) {
log.severe("Failed to locate text part of chat line! Can't display entry.");
return 0;
}
final TextRenderer textRenderer = text.getRenderer(TextRenderer.class);
if (textRenderer == null) {
log.severe("Text entry of the chat line does not contain the required text renderer.");
return 0;
}
return ((textRenderer.getFont() == null) ? 0 : textRenderer.getFont().getWidth(item.getLabel()))
+ ((item.getIcon() == null) ? 0 : item.getIcon().getWidth());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy