// -------------------------------------------------------------- -*- C++ -*-
// File: /usr/users/kratote/kra_xray/sessctrl/trstat/BawbSTrStat.cpp
// --------------------------------------------------------------------------
#include <BawbSTrStat.h>

#include <ilviews/chart.h>
#include <ilviews/chartcnt.h>
#include <ilviews/scale.h>

#include "sessapp.h"


#define	MAXPOINTS			61		// Â÷Æ® µð½ºÇÃ·¹ÀÌ ½Ã°£


// --------------------------------------------------------------------------
// User define values
// --------------------------------------------------------------------------
static IlvRect 				bboxs;
static IlvTimer* 			g_timer;
static IlvStairChart* 		charts;
static IlvChartContainer* 	containers;


// --------------------------------------------------------------------------
// Callbacks methods
// --------------------------------------------------------------------------
static void
QUIT(IlvView* view, IlvAny)
{
	if(g_timer != NULL ) delete g_timer;

	view->hide();
}


void
CBawbSTrStat::ID_BN_EXIT(IlvGraphic* g)
{
	QUIT(IlvContainer::getContainer(g), this);
}


// --------------------------------------------------------------------------
// User define functions
// --------------------------------------------------------------------------
static IlvChartDataYPoints*
creatChartData(IlvUInt count)
{
    IlvFloat* points = new IlvFloat[count];
    for(IlvUInt i = 0; i < count; ++i)
		points[i] = (IlvFloat)0;
    return new IlvChartDataYPoints(count, points);
}


static void
creatCharts(IlvView* parent)
{
    IlvDisplay* display = parent->getDisplay();

	IlvRect size(1, 1, bboxs.w()-1, bboxs.h()-1);
    containers = new IlvChartContainer(parent, bboxs, size,
			   			IlvPoint(0, 0), IlvVertical, IlvBottomRight);

    containers->currentAxis(IlvRight);
    containers->getScale(IlvBottom)->setDirection(IlvRight);
    containers->setScaleFormat(IlvBottomRight, "%.f");
	containers->fixOrigin(IlvRight, size.right());

	// Create Total StairChart
	charts = new IlvStairChart(display, creatChartData(MAXPOINTS),
					IlvPoint(0, 0), (IlvFloat)1, (IlvFloat)1);
    IlvColor* color = display->getColor("Blue");
    if(color) charts->setForeground(color);

	// Add Total StairChart
    containers->addChart(charts);

    // Initialize Total StairChart
	charts->boundingBox(size);
	charts->scroll((IlvFloat)(rand() % 500), size);
	containers->fitChartsToContents();
	containers->contentsChanged();
}


static void ILVCALLBACK
timerAction(IlvTimer* timer,IlvAny arg)
{
	IlvRect size;

	charts->boundingBox(size);
	charts->scroll((IlvFloat)(rand() % 500), size);
	containers->fitChartsToContents();
	containers->contentsChanged();
}


void
CBawbSTrStat::initScreen(IlvGraphic* g)
{
   	const char* className = g->className();
    IlvPrint(" %s : CBawbSTrStat::initScreen() method ...",className);

	// Total Transation StairChart Creat
	getID_RECT_TOTAL_TR()->boundingBox(bboxs, getTransformer());

	creatCharts(this);


	// Timer Setting and Running
	g_timer = new IlvTimer(getDisplay(), 1, 0, timerAction, this);
	g_timer->run();
	g_timer->doIt();

    setDestroyCallback(QUIT, this);
}
