Add a bit of "throbbing" to the display by displaying 1, 2, or 3 dots

after the status, incrementing every second.

Even if the status or percentage doesn't update for a while, the user
will know that the updater is still "working".
This commit is contained in:
Ray Greenwell
2012-03-08 20:11:13 +00:00
parent c8e3318705
commit 9fc677949a
@@ -25,17 +25,21 @@
package com.threerings.getdown.launcher;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.MessageFormat;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import javax.swing.JComponent;
import javax.swing.Timer;
import com.samskivert.swing.Label;
import com.samskivert.swing.LabelStyleConstants;
@@ -56,6 +60,18 @@ public class StatusPanel extends JComponent
public StatusPanel (ResourceBundle msgs)
{
_msgs = msgs;
// Add a bit of "throbbing" to the display by updating the number of dots displayed after
// our status. This lets users know things are still working.
new Timer(1000,
new ActionListener() {
public void actionPerformed (ActionEvent event) {
if (_status != null && !_displayError) {
_statusDots = (_statusDots % 3) + 1; // 1, 2, 3, 1, 2, 3, etc.
updateStatusLabel();
}
}
}).start();
}
public void init (UpdateInterface ifc, RotatingBackgrounds bg, Image barimg)
@@ -85,11 +101,7 @@ public class StatusPanel extends JComponent
if (_progress != percent) {
_progress = percent;
String msg = MessageFormat.format(get("m.complete"), percent);
_newplab = new Label(msg, _ifc.progressText, FONT);
if (_ifc.textShadow != null) {
_newplab.setAlternateColor(_ifc.textShadow);
_newplab.setStyle(LabelStyleConstants.SHADOW);
}
_newplab = createLabel(msg, _ifc.progressText);
needsRepaint = true;
}
@@ -116,11 +128,7 @@ public class StatusPanel extends JComponent
String remstr = minutes + ":" + ((seconds < 10) ? "0" : "") + seconds;
String msg = MessageFormat.format(get("m.remain"), remstr);
_newrlab = new Label(msg, _ifc.statusText, FONT);
if (_ifc.textShadow != null) {
_newrlab.setAlternateColor(_ifc.textShadow);
_newrlab.setStyle(LabelStyleConstants.SHADOW);
}
_newrlab = createLabel(msg, _ifc.statusText);
needsRepaint = true;
} else if (_rlabel != null || _newrlab != null) {
@@ -140,17 +148,9 @@ public class StatusPanel extends JComponent
*/
public void setStatus (String status, boolean displayError)
{
_status = xlate(status);
_displayError = displayError;
status = xlate(status);
_newlab = new Label(status, _ifc.statusText, FONT);
int width = getWidth() - _ifc.status.x*2;
width = width > 0 ? Math.min(_ifc.status.width, width) : _ifc.status.width;
_newlab.setTargetWidth(width);
if (_ifc.textShadow != null) {
_newlab.setAlternateColor(_ifc.textShadow);
_newlab.setStyle(LabelStyleConstants.SHADOW);
}
repaint();
updateStatusLabel();
}
// documentation inherited
@@ -233,6 +233,27 @@ public class StatusPanel extends JComponent
return _psize;
}
/**
* Update the status label.
*/
protected void updateStatusLabel ()
{
String status = _status;
if (!_displayError) {
for (int ii = 0; ii < _statusDots; ii++) {
status += " .";
}
}
_newlab = createLabel(status, _ifc.statusText);
int width = getWidth() - _ifc.status.x*2;
width = width > 0 ? Math.min(_ifc.status.width, width) : _ifc.status.width;
_newlab.setTargetWidth(width);
repaint();
}
/**
* Get the y coordinate of a label in the status area.
*/
protected int getStatusY (Label label)
{
// if the status region is higher than the progress region, we
@@ -244,6 +265,19 @@ public class StatusPanel extends JComponent
return _ifc.status.y + (_ifc.status.height - label.getSize().height);
}
/**
* Create a label, taking care of adding the shadow if needed.
*/
protected Label createLabel (String text, Color color)
{
Label label = new Label(text, color, FONT);
if (_ifc.textShadow != null) {
label.setAlternateColor(_ifc.textShadow);
label.setStyle(LabelStyleConstants.SHADOW);
}
return label;
}
/** Used by {@link #setStatus}. */
protected String xlate (String compoundKey)
{
@@ -311,6 +345,8 @@ public class StatusPanel extends JComponent
protected ResourceBundle _msgs;
protected int _progress = 0;
protected String _status;
protected int _statusDots = 1;
protected boolean _displayError;
protected Label _label, _newlab;
protected Label _plabel, _newplab;