Add a simple light-weight progress bar implementation

This implementation was lifted out of Gerrit Code Review.

Signed-off-by: Shawn O. Pearce <sop@google.com>
diff --git a/src/main/java/com/google/gwtexpui/progress/Progress.gwt.xml b/src/main/java/com/google/gwtexpui/progress/Progress.gwt.xml
new file mode 100644
index 0000000..7c5d832
--- /dev/null
+++ b/src/main/java/com/google/gwtexpui/progress/Progress.gwt.xml
@@ -0,0 +1,19 @@
+<!--
+ Copyright 2009 Google Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<module>
+  <inherits name="com.google.gwtexpui.user.User"/>
+  <stylesheet src='gwtexpui_progress1.cache.css' />
+</module>
diff --git a/src/main/java/com/google/gwtexpui/progress/client/ProgressBar.java b/src/main/java/com/google/gwtexpui/progress/client/ProgressBar.java
new file mode 100644
index 0000000..3028cbf
--- /dev/null
+++ b/src/main/java/com/google/gwtexpui/progress/client/ProgressBar.java
@@ -0,0 +1,75 @@
+// Copyright 2009 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.gwtexpui.progress.client;
+
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.FlowPanel;
+import com.google.gwt.user.client.ui.Label;
+
+/**
+ * A simple progress bar with a text label.
+ * <p>
+ * The bar is 200 pixels wide and 20 pixels high. To keep the implementation
+ * simple and lightweight this dimensions are fixed and shouldn't be modified by
+ * style overrides in client code or CSS.
+ * <p>
+ * Style name: <code>gwtexpui-ProgressMeter</code>
+ */
+public class ProgressBar extends Composite {
+  private final String callerText;
+  private final Label bar;
+  private final Label msg;
+  private int value;
+
+  /** Create a bar with no message text. */
+  public ProgressBar() {
+    this("");
+  }
+
+  /** Create a bar displaying the specified message. */
+  public ProgressBar(final String text) {
+    if (text == null || text.length() == 0) {
+      callerText = "";
+    } else {
+      callerText = text + " ";
+    }
+
+    final FlowPanel body = new FlowPanel();
+    body.setStyleName("gwtexpui-ProgressBar");
+
+    msg = new Label(callerText);
+    msg.setStyleName("gwtexpui-ProgressBar-Text");
+    body.add(msg);
+
+    bar = new Label("");
+    bar.setStyleName("gwtexpui-ProgressBar-Bar");
+    body.add(bar);
+
+    initWidget(body);
+  }
+
+  /** @return the current value of the progress meter. */
+  public int getValue() {
+    return value;
+  }
+
+  /** Update the bar's percent completion. */
+  public void setValue(final int pComplete) {
+    assert 0 <= pComplete && pComplete <= 100;
+    value = pComplete;
+    bar.setWidth("" + (2 * pComplete) + "px");
+    msg.setText(callerText + pComplete + "%");
+  }
+}
diff --git a/src/main/java/com/google/gwtexpui/progress/public/gwtexpui_progress1.cache.css b/src/main/java/com/google/gwtexpui/progress/public/gwtexpui_progress1.cache.css
new file mode 100644
index 0000000..347df36
--- /dev/null
+++ b/src/main/java/com/google/gwtexpui/progress/public/gwtexpui_progress1.cache.css
@@ -0,0 +1,28 @@
+.gwtexpui-ProgressBar {
+  position: relative;
+  border: 1px solid #6B90DA;
+  height: 20px;
+  width: 200px;
+}
+
+.gwtexpui-ProgressBar-Text {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  z-index: 2;
+  width: 200px;
+  padding-bottom: 3px;
+  text-align: center;
+  font-weight: bold;
+  font-style: italic;
+  font-size: smaller;
+}
+
+.gwtexpui-ProgressBar-Bar {
+  background: #F0F7F9;
+  border-right: 1px solid #D0D7D9;
+  position: absolute;
+  top: 0;
+  left: 0;
+  height: 20px;
+}