/* Copyright (c) 2002-2012 Croteam Ltd. 
This program is free software; you can redistribute it and/or modify
it under the terms of version 2 of the GNU General Public License as published by
the Free Software Foundation


This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */

// DlgPgRenderingStatistics.cpp : implementation file
//

#include "stdafx.h"
#include "DlgPgRenderingStatistics.h"

#ifdef _DEBUG
#undef new
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDlgPgRenderingStatistics property page

IMPLEMENT_DYNCREATE(CDlgPgRenderingStatistics, CPropertyPage)

CDlgPgRenderingStatistics::CDlgPgRenderingStatistics() : CPropertyPage(CDlgPgRenderingStatistics::IDD)
{
	//{{AFX_DATA_INIT(CDlgPgRenderingStatistics)
	m_strRenderingStatistics = _T("");
	//}}AFX_DATA_INIT
}

CDlgPgRenderingStatistics::~CDlgPgRenderingStatistics()
{
}

void CDlgPgRenderingStatistics::DoDataExchange(CDataExchange* pDX)
{
  if( theApp.m_bDisableDataExchange) return;

	CPropertyPage::DoDataExchange(pDX);

  // if dialog is recieving data
  if( pDX->m_bSaveAndValidate == FALSE)
  {
    CTString strRenderingProfile = "No rendering profile curently available (use F11 in game mode)\r\n";
    CTString strCSGProfile = "\r\n";
    // try to load rendering profile file ("WorldEditor.profile")
    try
    {
      theApp.m_strCSGAndShadowStatistics.Save_t(CTString("Temp\\CSGProfile.txt"));
      strCSGProfile.LoadKeepCRLF_t(CTString("Temp\\CSGProfile.txt"));

      CTFileStream fileProfile;
      fileProfile.Open_t(CTString("WorldEditor.profile"));
      // get size of profile file
      ULONG ulProfileFileSize = fileProfile.GetStreamSize();
      char *pchrFile = new char[ ulProfileFileSize+1];
      // set eol character
      pchrFile[ ulProfileFileSize] = 0;
      fileProfile.Read_t( pchrFile, ulProfileFileSize);
      strRenderingProfile = CTString( pchrFile);
      delete pchrFile;
    }
    // catch errors
    catch( char *strError)
    {
      // and do nothing
      (void) strError;
    }
    // set new report
    m_strRenderingStatistics = strRenderingProfile + strCSGProfile;
    // notice that statistics have been updated
    m_udStatsUpdated.MarkUpdated();
  }
  
	//{{AFX_DATA_MAP(CDlgPgRenderingStatistics)
	DDX_Text(pDX, IDC_RENDERING_STATISTICS, m_strRenderingStatistics);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgPgRenderingStatistics, CPropertyPage)
	//{{AFX_MSG_MAP(CDlgPgRenderingStatistics)
		// NOTE: the ClassWizard will add message map macros here
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgPgRenderingStatistics message handlers

BOOL CDlgPgRenderingStatistics::OnIdle(LONG lCount)
{
  // get active view 
  CWorldEditorView *pWorldEditorView = theApp.GetActiveView();

  // if we do have a window and a view and last rendered view is newer than rendering info
  if( (IsWindow(m_hWnd)) &&
      (pWorldEditorView != NULL) &&
      (!pWorldEditorView->m_chViewChanged.IsUpToDate( m_udStatsUpdated)) )
  {
    // change statistics
    UpdateData( FALSE);
  }
  return TRUE;
}