/*
GNU GENERAL PUBLIC LICENSE
Copyright (C) 2006 The Lobo Project
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
verion 2 of the License, or (at your option) any later version.
This program 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.
You should have received a copy of the GNU General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Contact info: lobochief@users.sourceforge.net
*/
package org.lobobrowser.primary.ext;
import java.awt.Dimension;
import java.awt.Graphics;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JProgressBar;
import org.lobobrowser.ua.ProgressType;
public class ProgressBar extends JProgressBar {
private static final long serialVersionUID = -6283186577566949668L;
private static final Logger logger = Logger.getLogger(ProgressBar.class.getName());
public ProgressBar() {
this.setStringPainted(true);
}
public void updateProgress(final ProgressType progressType, final int value, final int max) {
switch (progressType) {
case NONE:
case DONE:
this.setString("");
this.setIndeterminate(false);
this.setValue(0);
this.setMaximum(0);
break;
default:
if (max == -1) {
this.setIndeterminate(true);
this.setString(getSizeText(value));
} else {
this.setIndeterminate(false);
this.setValue(value);
this.setMaximum(max);
if (max == 0) {
this.setString("");
} else {
this.setString(((value * 100) / max) + "%");
}
}
break;
}
}
private static double round1(final double value) {
return Math.round(value * 10.0) / 10.0;
}
private static String getSizeText(final int numBytes) {
if (numBytes == 0) {
return "";
} else if (numBytes < 1024) {
return numBytes + " bytes";
} else {
final double numK = numBytes / 1024.0;
if (numK < 1024) {
return round1(numK) + " Kb";
} else {
final double numM = numK / 1024.0;
if (numM < 1024) {
return round1(numM) + " Mb";
} else {
final double numG = numM / 1024.0;
return round1(numG) + " Gb";
}
}
}
}
@Override
public Dimension getMinimumSize() {
return new Dimension(64, 18);
}
@Override
public Dimension getMaximumSize() {
return new Dimension(128, 100);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(128, 18);
}
@Override
protected void paintComponent(final Graphics g) {
try {
super.paintComponent(g);
} catch (final Exception err) {
logger.log(Level.SEVERE, "paintComponent(): Swing bug?", err);
}
}
}