X-Git-Url: http://git.nikiroo.be/?p=fanfix.git;a=blobdiff_plain;f=src%2Fjexer%2FTProgressBar.java;h=38f03373b7c8d5d08f323f0e56fa34bac1516048;hp=3947a940af7c28710988361272dd4d74c839912b;hb=HEAD;hpb=051e29138b18fb4b731a72f8727475b10e4c74e4 diff --git a/src/jexer/TProgressBar.java b/src/jexer/TProgressBar.java index 3947a94..38f0337 100644 --- a/src/jexer/TProgressBar.java +++ b/src/jexer/TProgressBar.java @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (C) 2017 Kevin Lamonte + * Copyright (C) 2019 Kevin Lamonte * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -30,6 +30,7 @@ package jexer; import jexer.bits.CellAttributes; import jexer.bits.GraphicsChars; +import jexer.bits.StringUtils; /** * TProgressBar implements a simple progress bar. @@ -55,6 +56,26 @@ public class TProgressBar extends TWidget { */ private int value = 0; + /** + * The left border character. + */ + private int leftBorderChar = GraphicsChars.CP437[0xC3]; + + /** + * The filled-in part of the bar. + */ + private int completedChar = GraphicsChars.BOX; + + /** + * The remaining to be filled in part of the bar. + */ + private int remainingChar = GraphicsChars.SINGLE_BAR; + + /** + * The right border character. + */ + private int rightBorderChar = GraphicsChars.CP437[0xB4]; + // ------------------------------------------------------------------------ // Constructors ----------------------------------------------------------- // ------------------------------------------------------------------------ @@ -86,11 +107,28 @@ public class TProgressBar extends TWidget { // TWidget ---------------------------------------------------------------- // ------------------------------------------------------------------------ + /** + * Override TWidget's height: we can only set height at construction + * time. + * + * @param height new widget height (ignored) + */ + @Override + public void setHeight(final int height) { + // Do nothing + } + /** * Draw a static progress bar. */ @Override public void draw() { + + if (getWidth() <= 2) { + // Bail out, we are too narrow to draw anything. + return; + } + CellAttributes completeColor = getTheme().getColor("tprogressbar.complete"); CellAttributes incompleteColor = getTheme().getColor("tprogressbar.incomplete"); @@ -98,27 +136,29 @@ public class TProgressBar extends TWidget { int progressInt = (int)(progress * 100); int progressUnit = 100 / (getWidth() - 2); - getScreen().putCharXY(0, 0, GraphicsChars.CP437[0xC3], incompleteColor); - for (int i = 0; i < getWidth() - 2; i++) { + putCharXY(0, 0, leftBorderChar, incompleteColor); + for (int i = StringUtils.width(leftBorderChar); i < getWidth() - 2;) { float iProgress = (float)i / (getWidth() - 2); int iProgressInt = (int)(iProgress * 100); if (iProgressInt <= progressInt - progressUnit) { - getScreen().putCharXY(i + 1, 0, GraphicsChars.BOX, - completeColor); + putCharXY(i, 0, completedChar, completeColor); + i += StringUtils.width(completedChar); } else { - getScreen().putCharXY(i + 1, 0, GraphicsChars.SINGLE_BAR, - incompleteColor); + putCharXY(i, 0, remainingChar, incompleteColor); + i += StringUtils.width(remainingChar); } } if (value >= maxValue) { - getScreen().putCharXY(getWidth() - 2, 0, GraphicsChars.BOX, + putCharXY(getWidth() - StringUtils.width(leftBorderChar) - + StringUtils.width(rightBorderChar), 0, completedChar, completeColor); } else { - getScreen().putCharXY(getWidth() - 2, 0, GraphicsChars.SINGLE_BAR, + putCharXY(getWidth() - StringUtils.width(leftBorderChar) - + StringUtils.width(rightBorderChar), 0, remainingChar, incompleteColor); } - getScreen().putCharXY(getWidth() - 1, 0, GraphicsChars.CP437[0xB4], - incompleteColor); + putCharXY(getWidth() - StringUtils.width(rightBorderChar), 0, + rightBorderChar, incompleteColor); } // ------------------------------------------------------------------------ @@ -179,4 +219,76 @@ public class TProgressBar extends TWidget { this.value = value; } + /** + * Set the left border character. + * + * @param ch the char to use + */ + public void setLeftBorderChar(final int ch) { + leftBorderChar = ch; + } + + /** + * Get the left border character. + * + * @return the char + */ + public int getLeftBorderChar() { + return leftBorderChar; + } + + /** + * Set the filled-in part of the bar. + * + * @param ch the char to use + */ + public void setCompletedChar(final int ch) { + completedChar = ch; + } + + /** + * Get the filled-in part of the bar. + * + * @return the char + */ + public int getCompletedChar() { + return completedChar; + } + + /** + * Set the remaining to be filled in part of the bar. + * + * @param ch the char to use + */ + public void setRemainingChar(final int ch) { + remainingChar = ch; + } + + /** + * Get the remaining to be filled in part of the bar. + * + * @return the char + */ + public int getRemainingChar() { + return remainingChar; + } + + /** + * Set the right border character. + * + * @param ch the char to use + */ + public void setRightBorderChar(final int ch) { + rightBorderChar = ch; + } + + /** + * Get the right border character. + * + * @return the char + */ + public int getRightBorderChar() { + return rightBorderChar; + } + }