void CExplorerTestView::InitListHeader()
{
	LV_COLUMN	lvColumn;
	CString		strHeader;
	CListCtrl&	listCtrl = GetListCtrl();
	lvColumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
	for(int i = 0 ; cListHeader[i] != NULL ; i++)
	{
		strHeader = cListHeader[i];
		lvColumn.fmt = (strHeader.Compare("크기") == 0 ? LVCFMT_RIGHT : LVCFMT_LEFT);
		lvColumn.cx = nHeaderWidth[i];
		lvColumn.pszText = cListHeader[i];
		lvColumn.iSubItem = i;
		listCtrl.InsertColumn(i, &lvColumn);
	}
	CHeaderCtrl* pH = (CHeaderCtrl*)GetListCtrl().GetDlgItem(0);
	pH->ModifyStyle(0, HDS_HOTTRACK);
}
BOOL CPage_Node_Movement::OnInitDialog()
{

	CPropertyPage::OnInitDialog();
	int PlanNo = m_pDoc->GetTimingPlanNo("ALLDAY"); 

	for(int p = 1; p <= 	_max_phase_number; p++)
	{
		m_bAvailablePhaseVector [p] = false; 
		m_EffectiveGreenTime [p]= 0;
	}

	m_CurrentNodeID =  m_pDoc->m_SelectedNodeID ;
	m_CurrentNodeNumber = m_pDoc->m_NodeNoMap [m_CurrentNodeID]->m_NodeNumber ;
	

	m_CycleLengthInSec = m_pDoc->m_NodeNoMap [m_CurrentNodeID]->m_CycleLengthInSecond ;
	// Give better margin to editors
	m_ListCtrl.SetCellMargin(1.2);
	CGridRowTraitXP* pRowTrait = new CGridRowTraitXP;  // Hao: this ponter should be delete. 
	m_ListCtrl.SetDefaultRowTrait(pRowTrait);



	m_Column_names.push_back ("Incoming Node");  //0
	m_Column_names.push_back ("Outgoing Node");   //1
	m_Column_names.push_back ("Turn Type"); //2
	m_Column_names.push_back ("Direction"); //3

	m_Column_names.push_back ("Prohibition"); //4

	m_Column_names.push_back ("Simu Total Volume"); //5
	m_Column_names.push_back ("Simu Hourly Volume"); //6
	m_Column_names.push_back ("Simu Delay (sec)"); //7

	//if(m_bSigalizedNode == true)
	//{
	//m_Column_names.push_back ("Green Start Time"); //9
	//m_Column_names.push_back ("Green End Time"); //10

	//}

	CHeaderCtrl* pHeader = m_ListCtrl.GetHeaderCtrl();
	if( pHeader!=NULL)
	{
		pHeader->ModifyStyle(HDS_BUTTONS, 0);    // disable the sorting.
	}

	//Add Columns and set headers
	for (size_t i=0;i<m_Column_names.size();i++)
	{

		CGridColumnTrait* pTrait = NULL;
		//              pTrait = new CGridColumnTraitEdit();

		if(m_Column_names[i].find ("Turn Type")!=  string::npos)
		{
			pTrait = new CGridColumnTraitEdit();
		}

		if(m_Column_names[i].find ("Direction")!=  string::npos)
		{
			pTrait = new CGridColumnTraitEdit();
		}

		if(m_Column_names[i].find ("Prohibition")!=  string::npos)
		{
			CGridColumnTraitCombo* pComboTrait = new CGridColumnTraitCombo;

			pComboTrait->SetStyle (CBS_DROPDOWNLIST);
			pComboTrait->AddItem(0, _T(""));
			pComboTrait->AddItem(0, _T("Prohibited"));

			pTrait = pComboTrait;
		}

		m_ListCtrl.InsertColumnTrait((int)i,m_Column_names.at(i).c_str(),LVCFMT_LEFT,-1,-1, pTrait);

		if(i<=10)
			m_ListCtrl.SetColumnWidth((int)i,100);
		else
			m_ListCtrl.SetColumnWidth((int)i,100);
	}


	//Add Rows

	DTANode* pNode  = m_pDoc->m_NodeNoMap [m_CurrentNodeID];

	for (unsigned int i=0;i< pNode->m_MovementDataMap[m_TimingPlanName].m_MovementVector .size();i++)
	{

		DTANodeMovement movement = pNode->m_MovementDataMap[m_TimingPlanName].m_MovementVector[i];


		CString str;
		str.Format ("%d", m_pDoc->m_NodeNoMap[movement.in_link_from_node_id]->m_NodeNumber  );  // 0: from node
		int Index = m_ListCtrl.InsertItem(LVIF_TEXT,i,str , 0, 0, 0, NULL);

		int column_index = 1;

		str.Format ("%d", m_pDoc->m_NodeNoMap[movement.out_link_to_node_id ]->m_NodeNumber ); // 1: to node
		m_ListCtrl.SetItemText(Index, column_index++,str);

		m_ListCtrl.SetItemText(Index, column_index++,m_pDoc->GetTurnString(movement.movement_turn)); //2: turn type
		m_ListCtrl.SetItemText(Index, column_index++,m_pDoc->GetTurnDirectionString( movement.movement_approach_turn)); //3: turn type

		if(movement.turning_prohibition_flag  == 1)
			str.Format ("Prohibited"); 
		else
			str.Format (""); 


		m_ListCtrl.SetItemText(Index, column_index++,str );  //4


		str.Format ("%.0f",movement.sim_turn_count   ); // 5: simulated volume
		m_ListCtrl.SetItemText(Index, column_index++,str );

		float number_of_hours = max(0.01,(m_pDoc->m_TimingPlanVector[PlanNo].end_time_in_min -  m_pDoc->m_TimingPlanVector[PlanNo].start_time_in_min )/60.0);
		float sim_turn_hourly_count = movement.sim_turn_count / number_of_hours;
		str.Format ("%.0f",sim_turn_hourly_count); // 6: simulated hourly volume
		m_ListCtrl.SetItemText(Index, column_index++,str );

		str.Format ("%.1f",movement.sim_turn_delay*60   ); // 7: simulated turn delay
		m_ListCtrl.SetItemText(Index, column_index++,str );

		str.Format ("%.1f",movement.QEM_StartTime   ); // green start time 
		m_ListCtrl.SetItemText(Index, column_index++,str );

		str.Format ("%.1f",movement.QEM_EndTime  ); // green end green time 
		m_ListCtrl.SetItemText(Index, column_index++,str );

	}


	



	UpdateData(0);
	return TRUE;  // return TRUE unless you set the focus to a control
	// EXCEPTION: OCX Property Pages should return FALSE
}