// ==========================================================================
// 							Class Implementation : COXDiffProgress
// ==========================================================================

// Source file : progress.cpp

// Version: 9.3

// This software along with its related components, documentation and files ("The Libraries")
// is © 1994-2007 The Code Project (1612916 Ontario Limited) and use of The Libraries is
// governed by a software license agreement ("Agreement").  Copies of the Agreement are
// available at The Code Project (www.codeproject.com), as part of the package you downloaded
// to obtain this file, or directly from our office.  For a copy of the license governing
// this software, you may contact us at legalaffairs@codeproject.com, or by calling 416-849-8900.                      
                          
// //////////////////////////////////////////////////////////////////////////

#include "stdafx.h"		// standard MFC include
#include "progress.h"

#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif

IMPLEMENT_DYNAMIC(COXDiffProgress, CObject)

#define new DEBUG_NEW

/////////////////////////////////////////////////////////////////////////////
// Definition of static members

// Data members -------------------------------------------------------------
// protected:
	// LONG m_MinVal;
	// --- The minimum value of the progress bar (specified with Init())

	// LONG m_MaxVal;
	// --- The maximumvalue of the progress bar (specified with Init())

	// LONG m_CurPos;
	// --- The current value of the progress bar

// private:
	
// Member functions ---------------------------------------------------------
// public:

COXDiffProgress::COXDiffProgress()
	:
	m_MinVal(0),
	m_MaxVal(0),
	m_CurPos(0)
	{
	}

void COXDiffProgress::Init(LONG minVal, LONG maxVal, LPCTSTR pszMessage)
	{     
	 
	_tprintf(_T("%s\r\n"),pszMessage);
	_tprintf(_T("________________________________________\r"));

	if (maxVal == minVal)
		maxVal = minVal + 1;

	m_MinVal = minVal;
	m_MaxVal = maxVal;
	m_CurPos = 0;
	}

BOOL COXDiffProgress::Adjust(LONG curVal)
	{
	// ... Must have initialized first
	ASSERT( ! (m_MinVal == 0 &&	m_MaxVal == 0 && m_CurPos == 0) );


	LONG pos;

	pos = 40 * (curVal - m_MinVal) / (m_MaxVal - m_MinVal);
	while (pos > m_CurPos)
		{
		_tprintf(_T("#"));
		m_CurPos++;
		}

	return TRUE;
	}

void COXDiffProgress::Abort(LPCTSTR pszMessage)
	{
	TRACE(_T("COXDiffProgress::Abort : %s\n"), pszMessage);
	_ftprintf(stderr,_T("%s\n"),pszMessage);
	exit(-1);
	}

void COXDiffProgress::Close()
	{
	Adjust(m_MaxVal);
	_tprintf(_T("\r\n"));

	m_MinVal = 0;
	m_MaxVal = 0;
	m_CurPos = 0;
	}

#ifdef _DEBUG
void COXDiffProgress::Dump(CDumpContext& dc) const
	{
	CObject::Dump(dc);
	dc << TEXT("\nm_MinVal : ") << m_MinVal;
	dc << TEXT("\nm_MaxVal : ") << m_MaxVal;
	dc << TEXT("\nm_CurPos : ") << m_CurPos;
	}

void COXDiffProgress::AssertValid() const
	{
	CObject::AssertValid();
	ASSERT(m_MinVal <= m_MaxVal);
	ASSERT(m_MinVal <= m_CurPos);
	ASSERT(m_CurPos <= m_MaxVal);
	}
#endif

COXDiffProgress::~COXDiffProgress()
	{
	}

// protected:
// private:
// ==========================================================================

