/*
* Copyright 2010-2015 Institut Pasteur.
*
* This file is part of Icy.
*
* Icy 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 version 3 of the License, or
* (at your option) any later version.
*
* Icy 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 Icy. If not, see <http://www.gnu.org/licenses/>.
*/
package icy.gui.frame.progress;
import icy.math.RateMeter;
import icy.math.UnitUtil;
import icy.util.StringUtil;
/**
* @author stephane
*/
public class DownloadFrame extends CancelableProgressFrame
{
/**
* calculated download rate
*/
private double rate;
/**
* internal
*/
private final RateMeter meter;
public DownloadFrame()
{
this("", 0);
}
public DownloadFrame(String path)
{
this(path, 0);
}
public DownloadFrame(String path, double length)
{
super(StringUtil.isEmpty(path) ? "" : StringUtil.limit("Downloading " + path, 64));
meter = new RateMeter();
this.length = length;
rate = 0;
}
public void setPath(String path)
{
setMessage(StringUtil.limit("Downloading " + path, 64));
}
/**
* @deprecated use setMessage(..) instead
*/
@Deprecated
public void setMessageBase(String messageBase)
{
setMessage(messageBase);
}
@Override
protected String buildMessage(String text)
{
String mess = text + " [";
// information on position
if (position != -1d)
mess += UnitUtil.getBytesString(position);
else
mess += "???";
mess += " / ";
if (length > 0d)
mess += UnitUtil.getBytesString(length);
else
mess += "???";
if (rate > 0)
mess += " - " + UnitUtil.getBytesString(rate) + "/s";
mess += "]";
return super.buildMessage(mess);
}
@Override
public void setLength(double length)
{
if (getLength() != length)
meter.reset();
super.setLength(length);
}
@Override
public void setPosition(double position)
{
// update rate
if (getPosition() < position)
rate = meter.updateFromTotal(position);
else
rate = 0;
super.setPosition(position);
}
}