// HotfixOCX.cpp : Implementation of CHotfixOCX

#include "stdafx.h"
#include "HotfixManager.h"
#include "HotfixOCX.h"
#include <Windows.h>
#include <commctrl.h>
#include <stdio.h>
#include <comdef.h>


/////////////////////////////////////////////////////////////////////////////
// CHotfixOCX
BOOL CHotfixOCX::ResizeButtons(RECT *rc)
{


	::MoveWindow(WebButton, 
            rc->left+40,
            rc->bottom - 40,
            100,
			28,
            TRUE);
	::MoveWindow(UninstButton,
			rc->left+180,
			rc->bottom - 40,
            100,
            28,
            TRUE);
	::MoveWindow(RptButton,
			rc->left+320,
			rc->bottom - 40,
            100,
            28,
            TRUE);

	return TRUE;
}
BOOL CHotfixOCX::CreateButton( HINSTANCE hInst, HWND hWnd, RECT * rc)							
{

	_TCHAR       Temp[255];
	DWORD        dwSize = 255;
	BOOL        bSuccess = TRUE;
	
	LoadString(hInst,IDS_BN_VIEW_WEB, Temp,dwSize);
	WebButton = CreateWindow (_T("button"), Temp,WS_CHILD | BS_DEFPUSHBUTTON|WS_VISIBLE,0,0,0,0,hWnd,(HMENU) IDC_WEB_BUTTON,hInst,NULL);
	LoadString(hInst,IDS_BN_UNINSTALL, Temp,dwSize);

	UninstButton = CreateWindow (_T("button"), Temp,WS_CHILD | BS_PUSHBUTTON|WS_VISIBLE,0,0,0,0,hWnd,(HMENU) IDC_UNINST_BUTTON,hInst,NULL);
	LoadString(hInst,IDS_BN_PRINT_REPORT, Temp,dwSize);

	RptButton = CreateWindow (_T("button"), Temp,WS_CHILD | BS_PUSHBUTTON|WS_VISIBLE,0,0,0,0,hWnd,(HMENU) IDC_RPT_BUTTON,hInst,NULL);

/*	if(!hButton)
	   return NULL;*/
    NONCLIENTMETRICS ncm;
	HFONT hFont;

		ncm.cbSize = sizeof(ncm);
		SystemParametersInfo(SPI_GETNONCLIENTMETRICS,sizeof (ncm),&ncm,0);
	
	//	_tcscpy(ncm.lfMenuFont.lfFaceName,_T("MS Shell Dlg"));
		 // = _T("MS Shell Dlg");
		hFont = CreateFontIndirect(&ncm.lfMenuFont);
		
	SendMessage(WebButton,WM_SETFONT, (WPARAM)hFont ,MAKELPARAM(TRUE, 0));
	SendMessage(UninstButton,WM_SETFONT, (WPARAM)hFont ,MAKELPARAM(TRUE, 0));
	SendMessage(RptButton,WM_SETFONT, (WPARAM)hFont ,MAKELPARAM(TRUE, 0));

	
//	MessageBox(NULL,_T("Got the Button Created"),_T(""),MB_OK);
	ResizeButtons(rc);
	return TRUE;
}

BOOL CHotfixOCX::ShowWebPage(_TCHAR *HotFix)
{
    char temp[255];
	char Command[255];	
	if (_tcscmp(HotFix,_T("\0")))
	{
		wcstombs(temp,HotFix,255);
        sprintf(Command, "Explorer.exe \"http://Support.Microsoft.com/Support/Misc/KbLookup.asp?ID=%s\"",  temp+1);
		 //MessageBox(Command,NULL,MB_OK);
		WinExec( (char*)Command, SW_SHOWNORMAL);
	}
	return TRUE;
}

STDMETHODIMP CHotfixOCX::get_Command(long *pVal)
{
	// TODO: Add your implementation code here

	return S_OK;
}

STDMETHODIMP CHotfixOCX::put_Command(long newVal)
{
	// TODO: Add your implementation code here
	switch (newVal)
	{
	case IDC_VIEW_BY_FILE:
		// Change the current view type to by file.
		ListViews.SetViewMode(VIEW_BY_FILE);
		break;
	case IDC_VIEW_BY_HOTFIX:
	    // Change the current view type to by hotfix
		ListViews.SetViewMode(VIEW_BY_HOTFIX);
		break;
	case IDC_UNINSTALL:
		// Uninstall the current hotfix if pointing at the local system
		ListViews.Uninstall();
		break;
	
	case IDC_VIEW_WEB:
		// View the web page for the current hotfix
		ShowWebPage(ListViews.GetCurrentHotfix());
		break;
		
	case IDC_EXPORT:
			ListViews.SaveToCSV();

        	// Generate a report for the current system
		break;
	case IDC_PRINT_REPORT:
			ListViews.PrintReport();
		break; 
	}
 	return S_OK;
}

STDMETHODIMP CHotfixOCX::get_ComputerName(BSTR *pVal)
{
	// TODO: Add your implementation code here
	// Return the name of the current target computer.
	return S_OK;
}

STDMETHODIMP CHotfixOCX::put_ComputerName(BSTR newVal)
{
	// TODO: Add your implementation code here
	// Set the name of the target computer.
	//_bstr_t Val(newVal,FALSE);
	_tcscpy(ComputerName,newVal);

	ListViews.Initialize(ComputerName);
	return S_OK;
}

STDMETHODIMP CHotfixOCX::get_ProductName(BSTR *pVal)
{
	// TODO: Add your implementation code here

	return S_OK;
}

STDMETHODIMP CHotfixOCX::put_ProductName(BSTR newVal)
{
	_TCHAR Temp[255];
	// TODO: Add your implementation code here
	// Set the name of the current producted selected in the snap-in scope tree.
//	_bstr_t Val(newVal,FALSE);
    _tcscpy (Temp,newVal);
	
//	MessageBox(Temp,_T("Recieved....."),MB_OK);
	ListViews.SetProductName(Temp);
	return S_OK;
}

STDMETHODIMP CHotfixOCX::get_ViewState(long *pVal)
{
	// TODO: Add your implementation code here
	*pVal = ListViews.GetCurrentView();
	return S_OK;
}

STDMETHODIMP CHotfixOCX::get_Remoted(BOOL *pVal)
{
	// TODO: Add your implementation code here
	*pVal = ListViews.m_bRemoted;
	return S_OK;
}

STDMETHODIMP CHotfixOCX::get_HaveHotfix(BOOL *pVal)
{
	// TODO: Add your implementation code here
	if (_tcscmp( ListViews.m_CurrentHotfix, _T("\0")))
		*pVal = TRUE;
	else
		*pVal = FALSE;
	return S_OK;
}

STDMETHODIMP CHotfixOCX::get_CurrentState(long *pVal)
{
	// TODO: Add your implementation code here
    *pVal = ListViews.GetState();
	return S_OK;
}