/*======================================================================================//
|  Process Control                                                                      //
|                                                                                       //
|Copyright (c) 1998  Sequent Computer Systems, Incorporated.  All rights reserved.      //
|                                                                                       //
|File Name:    BaseNode.cpp                                                             //
|                                                                                       //
|Description:  Helpers for container nodes                                              //
|                                                                                       //
|Created:      Paul Skoglund 05-1999                                                    //
|                                                                                       //
|Rev History:                                                                           //
|                                                                                       //
|=======================================================================================*/

#include "StdAfx.h"
#include "BaseNode.h"

#include "ManagementPages.h"

HRESULT InsertProcessHeaders(IHeaderCtrl2* ipHeaderCtrl)
{
  ASSERT(ipHeaderCtrl);
  if (!ipHeaderCtrl)
    return E_UNEXPECTED;

  ITEM_STR str;

  LoadStringHelper(str, IDS_PROCESS_ALIAS_HDR);
  VERIFY(S_OK == ipHeaderCtrl->InsertColumn( CProcessFolder::PROCESS_ALIAS_COLUMN, str, 0, PROCESS_ALIAS_COLUMN_WIDTH )); 

  LoadStringHelper(str, IDS_IMAGE_NAME_HDR);
  VERIFY(S_OK == ipHeaderCtrl->InsertColumn( CProcessFolder::IMAGE_NAME_COLUMN, str, 0, IMAGE_NAME_COLUMN_WIDTH ));

  LoadStringHelper(str, IDS_PID_HDR);
  VERIFY(S_OK == ipHeaderCtrl->InsertColumn( CProcessFolder::PID_COLUMN, str, 0, PID_COLUMN_WIDTH ));

  LoadStringHelper(str, IDS_STATUS_HDR);
  VERIFY(S_OK == ipHeaderCtrl->InsertColumn( CProcessFolder::STATUS_COLUMN, str, 0, STATUS_COLUMN_WIDTH ));

  LoadStringHelper(str, IDS_AFFINITY_HDR);
  VERIFY(S_OK == ipHeaderCtrl->InsertColumn( CProcessFolder::AFFINITY_COLUMN, str, 0, AFFINITY_COLUMN_WIDTH ));

  LoadStringHelper(str, IDS_PRIORITY_HDR);
  VERIFY(S_OK == ipHeaderCtrl->InsertColumn( CProcessFolder::PRIORITY_COLUMN, str, 0, PRIORITY_COLUMN_WIDTH ));

  LoadStringHelper(str, IDS_JOB_OWNER_HDR);
  VERIFY(S_OK == ipHeaderCtrl->InsertColumn( CProcessFolder::JOB_OWNER_COLUMN, str, 0, JOB_OWNER_COLUMN_WIDTH ));

  LoadStringHelper(str, IDS_USER_TIME_HDR);
  VERIFY(S_OK == ipHeaderCtrl->InsertColumn( CProcessFolder::USER_TIME_COLUMN, str, 0, USER_TIME_COLUMN_WIDTH ));

  LoadStringHelper(str, IDS_KERNEL_TIME_HDR);
  VERIFY(S_OK == ipHeaderCtrl->InsertColumn( CProcessFolder::KERNEL_TIME_COLUMN, str, 0, KERNEL_TIME_COLUMN_WIDTH ));

  LoadStringHelper(str, IDS_CREATE_TIME_HDR);
  VERIFY(S_OK == ipHeaderCtrl->InsertColumn( CProcessFolder::CREATE_TIME_COLUMN, str, 0, CREATE_TIME_COLUMN_WIDTH ));

  return S_OK;
}


HRESULT PCProcListGetDisplayInfo(RESULTDATAITEM &ResultItem, const PCProcListItem &ref, ITEM_STR &StorageStr)
{
  if (ResultItem.mask & RDI_IMAGE)
  {
    if (ref.lFlags & PCLFLAG_IS_DEFINED)
      ResultItem.nImage = PROCITEMIMAGE;
    else
      ResultItem.nImage = PROCITEMIMAGE_NODEFINITION;
  }

  if (ResultItem.mask & RDI_STR)
  {
		LPCTSTR &pstr = ResultItem.str;
    switch (ResultItem.nCol)
    {
    case CProcessFolder::PROCESS_ALIAS_COLUMN:
      pstr = ref.procName;
      break;
		case CProcessFolder::IMAGE_NAME_COLUMN:
			if (ref.lFlags & PCLFLAG_IS_RUNNING)
				pstr = ref.imageName;
			else 
				pstr = _T("");
			break;
		case CProcessFolder::PID_COLUMN:
			if (ref.lFlags & PCLFLAG_IS_RUNNING)
				pstr = FormatPCUINT64(StorageStr, ref.procStats.pid);
			else 
				pstr = _T("");
			break;
    case CProcessFolder::STATUS_COLUMN:
      if(ref.lFlags & PCLFLAG_IS_MANAGED)
        pstr = (TCHAR *) LoadStringHelper(StorageStr, IDS_MANAGED);
      else
        pstr = _T("");
      break;
		case CProcessFolder::AFFINITY_COLUMN:
			if (ref.lFlags & PCLFLAG_IS_RUNNING)
				pstr = FormatAffinity(StorageStr, ref.actualAffinity);			
			else
				pstr = _T("");
			break;
    case CProcessFolder::PRIORITY_COLUMN:
			if (ref.lFlags & PCLFLAG_IS_RUNNING)
				pstr = FormatPriority(StorageStr, ref.actualPriority);
			else
				pstr = _T("");
			break;
		case CProcessFolder::JOB_OWNER_COLUMN:
			if (ref.lFlags & PCLFLAG_IS_IN_A_JOB)
				pstr = ref.jobName;
			else
				pstr = _T("");
			break;
    case CProcessFolder::USER_TIME_COLUMN:
			if (ref.lFlags & PCLFLAG_IS_RUNNING)
				pstr = FormatTimeToms(StorageStr, ref.procStats.TotalUserTime);
			else
				pstr = _T("");
			break;
    case CProcessFolder::KERNEL_TIME_COLUMN:
			if (ref.lFlags & PCLFLAG_IS_RUNNING)
				pstr = FormatTimeToms(StorageStr, ref.procStats.TotalKernelTime);
			else
				pstr = _T("");
			break;
    case CProcessFolder::CREATE_TIME_COLUMN:
			if (ref.lFlags & PCLFLAG_IS_RUNNING)
				pstr = FormatTime(StorageStr, ref.procStats.createTime);
			else
				pstr = _T("");
			break;
    default:
      ASSERT(FALSE);
      pstr = _T("");
      break;
    }
  }
  return S_OK;
}