--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testdev/ite/src/com.nokia.testfw.resultview/src/com/nokia/testfw/resultview/view/TestProgressBar.java Tue Mar 30 14:39:29 2010 +0800
@@ -0,0 +1,203 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+package com.nokia.testfw.resultview.view;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+
+import com.nokia.testfw.core.model.result.TestRunResult;
+
+/**
+ * A progress bar with a red/green indication for success or failure.
+ */
+public class TestProgressBar extends Canvas {
+ private static final int DEFAULT_WIDTH = 160;
+ private static final int DEFAULT_HEIGHT = 16;
+
+ int totalCount = 0;
+ int currentCount = 0;
+ boolean error = false;
+ boolean stopped = false;
+
+ int fColorBarWidth = 0;
+ private Color fOKColor;
+ private Color fFailureColor;
+ private Color fStoppedColor;
+
+ public TestProgressBar(Composite parent) {
+ super(parent, SWT.NONE);
+
+ addControlListener(new ControlAdapter() {
+ public void controlResized(ControlEvent e) {
+ fColorBarWidth = scale(currentCount);
+ redraw();
+ }
+ });
+ addPaintListener(new PaintListener() {
+ public void paintControl(PaintEvent e) {
+ paint(e);
+ }
+ });
+ addDisposeListener(new DisposeListener() {
+ public void widgetDisposed(DisposeEvent e) {
+ fFailureColor.dispose();
+ fOKColor.dispose();
+ fStoppedColor.dispose();
+ }
+ });
+
+ Display display = parent.getDisplay();
+ fFailureColor = new Color(display, 159, 63, 63);
+ fOKColor = new Color(display, 95, 191, 95);
+ fStoppedColor = new Color(display, 120, 120, 120);
+ }
+
+ public void setTestCounts(int counts) {
+ totalCount = counts;
+ fColorBarWidth = scale(currentCount);
+ paintStep(1, fColorBarWidth);
+ }
+
+ public void addTestCount() {
+ setTestCounts(totalCount + 1);
+ }
+
+ public void reset() {
+ error = false;
+ stopped = false;
+ currentCount = 0;
+ fColorBarWidth = 0;
+ totalCount = 0;
+ redraw();
+ }
+
+ private void paintStep(int startX, int endX) {
+ GC gc = new GC(this);
+ setStatusColor(gc);
+ Rectangle rect = getClientArea();
+ startX = Math.max(1, startX);
+ gc.fillRectangle(startX, 1, endX - startX, rect.height - 2);
+ gc.dispose();
+ }
+
+ private void setStatusColor(GC gc) {
+ if (stopped) {
+ gc.setBackground(fStoppedColor);
+ } else if (error) {
+ gc.setBackground(fFailureColor);
+ } else {
+ gc.setBackground(fOKColor);
+ }
+ }
+
+ public void stopTest() {
+ stopped = true;
+ redraw();
+ }
+
+ private int scale(int value) {
+ if (totalCount > 0) {
+ Rectangle r = getClientArea();
+ if (r.width != 0) {
+ return Math.max(0, value * (r.width - 2) / totalCount);
+ }
+ }
+
+ return value;
+ }
+
+ private void drawBevelRect(GC gc, int x, int y, int w, int h,
+ Color topleft, Color bottomright) {
+ gc.setForeground(topleft);
+ gc.drawLine(x, y, x + w - 1, y);
+ gc.drawLine(x, y, x, y + h - 1);
+
+ gc.setForeground(bottomright);
+ gc.drawLine(x + w, y, x + w, y + h);
+ gc.drawLine(x, y + h, x + w, y + h);
+ }
+
+ private void paint(PaintEvent event) {
+ GC gc = event.gc;
+ Display disp = getDisplay();
+
+ Rectangle rect = getClientArea();
+ gc.fillRectangle(rect);
+ drawBevelRect(gc, rect.x, rect.y, rect.width - 1, rect.height - 1, disp
+ .getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW), disp
+ .getSystemColor(SWT.COLOR_WIDGET_HIGHLIGHT_SHADOW));
+
+ setStatusColor(gc);
+ fColorBarWidth = Math.min(rect.width - 2, fColorBarWidth);
+ gc.fillRectangle(1, 1, fColorBarWidth, rect.height - 2);
+ }
+
+ public Point computeSize(int wHint, int hHint, boolean changed) {
+ checkWidget();
+ Point size = new Point(DEFAULT_WIDTH, DEFAULT_HEIGHT);
+ if (wHint != SWT.DEFAULT) {
+ size.x = wHint;
+ }
+ if (hHint != SWT.DEFAULT) {
+ size.y = hHint;
+ }
+
+ return size;
+ }
+
+ public void step(boolean passed) {
+ currentCount++;
+ int x = fColorBarWidth;
+
+ fColorBarWidth = scale(currentCount);
+ if (!error && !passed) {
+ error = true;
+ x = 1;
+ }
+ if (currentCount == totalCount) {
+ fColorBarWidth = getClientArea().width - 1;
+ }
+ paintStep(x, fColorBarWidth);
+ }
+
+ /**
+ * initialize the progress bar with a test result
+ *
+ * @param result
+ * @see TestRunResult
+ */
+ public void init(TestRunResult result) {
+ totalCount = result.getTestCount();
+ currentCount = result.getPassedTestCount()
+ + result.getfailedTestCount() + result.getSkippedTestCount();
+ error = result.getfailedTestCount() > 0 ? true : false;
+ redraw();
+ }
+
+}