package openblocks.client.gui; import net.minecraft.client.gui.FontRenderer; import net.minecraft.util.StatCollector; import openmods.gui.component.GuiComponentBook; import openmods.gui.component.GuiComponentLabel; import openmods.gui.component.page.TitledPage; import openmods.gui.listener.IMouseDownListener; public class TocPage extends TitledPage { private static final int TOC_LINE_LEFT_MARGIN = 20; private static final int TOC_TOTAL_LINE_WIDTH = 140; private static final int TOC_START_HEIGHT = 70; private static final int TOC_LINE_HEIGHT = 15; private final GuiComponentBook book; private final FontRenderer fontRenderer; private int nextTocEntry; public TocPage(GuiComponentBook book, FontRenderer fontRenderer) { super("openblocks.gui.welcome.title", "openblocks.gui.welcome.content"); this.book = book; this.fontRenderer = fontRenderer; } private static int tocLine(int index) { return TOC_START_HEIGHT + index * TOC_LINE_HEIGHT; } public void addTocEntry(String untranslatedLabel, int pageIndex, int displayedPage) { int lineWidthBudget = TOC_TOTAL_LINE_WIDTH; final String translatedLabel = StatCollector.translateToLocal(untranslatedLabel); final String pageNumber = Integer.toString(displayedPage); final int labelWidth = fontRenderer.getStringWidth(translatedLabel); lineWidthBudget -= labelWidth; final int pageNumberWidth = fontRenderer.getStringWidth(pageNumber); lineWidthBudget -= pageNumberWidth; final int spaceWidth = fontRenderer.getCharWidth(' '); lineWidthBudget -= 2 * spaceWidth; final int dotWidth = fontRenderer.getCharWidth('.'); final StringBuilder paddedPageNumberBuilder = new StringBuilder(); while (lineWidthBudget - dotWidth > 0) { paddedPageNumberBuilder.append('.'); lineWidthBudget -= dotWidth; } paddedPageNumberBuilder.append(' '); paddedPageNumberBuilder.append(pageNumber); String paddedPageNumber = paddedPageNumberBuilder.toString(); final IMouseDownListener pageJumpListener = book.createBookmarkListener(pageIndex); { final GuiComponentLabel label = new GuiComponentLabel(TOC_LINE_LEFT_MARGIN, tocLine(nextTocEntry), translatedLabel); label.setListener(pageJumpListener); addComponent(label); } { final int pos = TOC_LINE_LEFT_MARGIN + labelWidth + lineWidthBudget; final GuiComponentLabel label = new GuiComponentLabel(pos, tocLine(nextTocEntry), paddedPageNumber); label.setListener(pageJumpListener); addComponent(label); } nextTocEntry++; } }