// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "TAS.h"
#include "MainFrm.h"
#include "Update_Me_TAS_Doc.h"

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

/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_WM_CLOSE()
	//}}AFX_MSG_MAP
	ON_COMMAND(ID_FILE_REMEMBER, &CMainFrame::OnFileRemember)
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_INDICATOR_CAPS,
	ID_INDICATOR_NUM,
	ID_INDICATOR_SCRL,
};

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	// TODO: add member initialization m_EventCode here
	
}

CMainFrame::~CMainFrame()
{
}

//To enable the auto position feature of the MainFrame window, follow the 2 steps, (1), (2) 
// (1) Define ROOT_PATH and include the following header:
#define ROOT_PATH "\\_Config_Files\\Window_Position_Files\\Root_TAS.txt"
#include "RootFunctions_for_MainFrame.h"

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if(CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	if(!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;      // fail to create
	}

	////First, load a 256-colour bitmap from a resource:
	//HBITMAP hBitmap = (HBITMAP) ::LoadImage(AfxGetInstanceHandle(),
	//	MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_BITMAP,
	//	0,0, LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS);
	//CBitmap bm;
	//bm.Attach(hBitmap);
	////Next, create a 256-colour image list and add our bitmap to it:
	//CImageList m_imagelist;
	//m_imagelist.Create(16, 15, ILC_COLOR32, 12, 4); 
	//m_imagelist.Add(&bm, (CBitmap*) NULL);
	////Finally, we need to tell the toolbar to use the new image list:
	//m_wndToolBar.GetToolBarCtrl().SetImageList(&m_imagelist);

	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	cs.style &= ~FWS_ADDTOTITLE; //Do not show "Untitled-" 

	#define TOP_LEFT_WINDOW 0.5
	//#####  (2) Read root file to position the MainFraim  ##########
	if(RootFileOpen(ROOT_PATH)==1){//Is there a valid root file? 
		//Old format (absolute values)
		if(m_Height_in_screen>=1){
			//Size
			cs.cy = ::GetSystemMetrics(SM_CYSCREEN)*(0.04762); //Specifies the height of the new window.
			cs.cx = ::GetSystemMetrics(SM_CXSCREEN)*(1-TOP_LEFT_WINDOW); //Specifies the width of the new window.
			//Position
			cs.y = ::GetSystemMetrics(SM_CYSCREEN)*(1./3.5);// y of the upper left corner of the new window. Coordinates are relative to the parent window if the new window is a child window; otherwise coordinates are relative to the screen origin.
			cs.x = ::GetSystemMetrics(SM_CXSCREEN)*0.5; //x of the upper left corner of the new window. Coordinates are relative to the parent window if the new window is a child window; otherwise coordinates are relative to the screen origin.
		}
		//New format (relative values)
		else{
			//Size
			cs.cy = RoundToClosestInt(::GetSystemMetrics(SM_CYSCREEN)*(m_Height_in_screen)); //Specifies the height of the new window.
			cs.cx = RoundToClosestInt(::GetSystemMetrics(SM_CXSCREEN)*(m_Width_in_screen)); //Specifies the width of the new window.
			//Position
			if(m_Top_in_screen>0.95){AfxMessageBox("m_Top_in_screen>0.95\nAdjusting"); m_Top_in_screen=0.95;} 
			if(m_Left_in_screen>0.95){AfxMessageBox("m_Left_in_screen>0.95\nAdjusting"); m_Left_in_screen=0.95;} 
			cs.y = RoundToClosestInt(::GetSystemMetrics(SM_CYSCREEN)*m_Top_in_screen);// y of the upper left corner of the new window. Coordinates are relative to the parent window if the new window is a child window; otherwise coordinates are relative to the screen origin.
			cs.x = RoundToClosestInt(::GetSystemMetrics(SM_CXSCREEN)*m_Left_in_screen); //x of the upper left corner of the new window. Coordinates are relative to the parent window if the new window is a child window; otherwise coordinates are relative to the screen origin.
		}
	}
	else{//Use a default configuration
		//Size
		cs.cy = ::GetSystemMetrics(SM_CYSCREEN)*(0.04762); //Specifies the height of the new window.
		cs.cx = ::GetSystemMetrics(SM_CXSCREEN)*(1-TOP_LEFT_WINDOW); //Specifies the width of the new window.
		//Position
		cs.y = ::GetSystemMetrics(SM_CYSCREEN)*(1./3.5);// y of the upper left corner of the new window. Coordinates are relative to the parent window if the new window is a child window; otherwise coordinates are relative to the screen origin.
		cs.x = ::GetSystemMetrics(SM_CXSCREEN)*0.5; //x of the upper left corner of the new window. Coordinates are relative to the parent window if the new window is a child window; otherwise coordinates are relative to the screen origin.
	}
	//############################################################
	if(cs.cx<80) cs.cx=80; //Set the minimun so that it gets shown even when the user's monitor is small.
	if(cs.cy<76) cs.cy=76; //Set the minimun so that it gets shown even when the user's monitor is small.

	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers


void CMainFrame::OnClose() 
{
	CTASDoc::m_IsPlayButtonON=0;
	
	for(int timeOut=0; timeOut<20; timeOut++){
		Sleep(10);
	}	

	CFrameWnd::OnClose();
}

