//                                          
// Application Verifier UI
// Copyright (c) Microsoft Corporation, 2001
//
//
//
// module: ChooseExe.cpp
// author: CLupu
// created: 04/13/2001
//
// Description:
//  
// "Select individual tests" wizard page class.
//

#include "stdafx.h"
#include "appverif.h"

#include "Options.h"
#include "AVUtil.h"
#include "AVGlobal.h"
#include "Setting.h"

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

DWORD g_dwRegFlags;
TCHAR g_szCrashDumpFile[MAX_PATH];

//
// Help IDs
//

static DWORD MyHelpIds[] =
{
    0, 0
};


/////////////////////////////////////////////////////////////////////////////
// COptionsPage property page

IMPLEMENT_DYNCREATE(COptionsPage, CAppverifPage)

COptionsPage::COptionsPage() : CAppverifPage(COptionsPage::IDD)
{
    //{{AFX_DATA_INIT(COptionsPage)
        // NOTE: the ClassWizard will add member initialization here
    //}}AFX_DATA_INIT

    m_nIssues = 0;
}

COptionsPage::~COptionsPage()
{
}

void COptionsPage::DoDataExchange(CDataExchange* pDX)
{
    CAppverifPage::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(COptionsPage)
    DDX_Control(pDX, IDC_ISSUES, m_IssuesList);
    DDX_Control(pDX, IDC_CRASHDUMP_FILE, m_CrashDumpFile);
    DDX_Control(pDX, IDC_CREATE_CRASHDUMP_FILE, m_CreateCrashDumpFile);
    DDX_Control(pDX, IDC_OPTIONS_NEXTDESCR_STATIC, m_NextDescription);
    //}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(COptionsPage, CAppverifPage)
    //{{AFX_MSG_MAP(COptionsPage)
    ON_MESSAGE( WM_HELP, OnHelp )
    ON_WM_CONTEXTMENU()
	ON_BN_CLICKED(IDC_CREATE_CRASHDUMP_FILE, OnCheckCreateCrashDumpFile)
    ON_BN_CLICKED(IDC_BROWSE_CRASHDUMP, OnBrowseCrashDumpFile)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
ULONG COptionsPage::GetDialogId() const
{
    return IDD_OPTIONS_PAGE;
}

/////////////////////////////////////////////////////////////////////////////


void COptionsPage::InsertIssue( DWORD idResIssue )
{
    TCHAR szIssue[128];

    VERIFY( AVLoadString( idResIssue, szIssue, ARRAY_LENGTH( szIssue ) ) );
    
    m_IssuesList.InsertItem(m_nIssues, szIssue);
    m_IssuesList.SetCheck(m_nIssues, TRUE);
    
    g_dwRegFlags |= g_AllNamesAndBits[ m_nIssues ].m_dwBit;

    m_nIssues++;
    
    return;
}


/////////////////////////////////////////////////////////////////////////////
// COptionsPage message handlers

/////////////////////////////////////////////////////////////
LONG COptionsPage::OnHelp( WPARAM wParam, LPARAM lParam )
{
    LONG lResult = 0;
    LPHELPINFO lpHelpInfo = (LPHELPINFO)lParam;

    ::WinHelp( 
        (HWND) lpHelpInfo->hItemHandle,
        g_szAVHelpFile,
        HELP_WM_HELP,
        (DWORD_PTR) MyHelpIds );

    return lResult;
}

/////////////////////////////////////////////////////////////////////////////
void COptionsPage::OnBrowseCrashDumpFile() 
{
    TCHAR        szFilter[] = _T("Memory dump files (*.dmp)\0*.dmp\0");
    OPENFILENAME ofn;

    ofn.lStructSize       = sizeof(OPENFILENAME);
    ofn.hwndOwner         = m_hWndTop;
    ofn.hInstance         = NULL;
    ofn.lpstrFilter       = szFilter;
    ofn.lpstrCustomFilter = NULL;
    ofn.nMaxCustFilter    = 0;
    ofn.nFilterIndex      = 0;
    ofn.lpstrFile         = g_szCrashDumpFile;
    ofn.nMaxFile          = MAX_PATH;
    ofn.lpstrFileTitle    = NULL;
    ofn.nMaxFileTitle     = 0;
    ofn.lpstrInitialDir   = NULL;
    ofn.lpstrTitle        = _T("Choose the crash dump file");
    ofn.Flags             = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY;
    ofn.lpstrDefExt       = _T("DMP");

    if ( !GetOpenFileName(&ofn) )
    {
        return;
    }

    m_CrashDumpFile.SetWindowText(g_szCrashDumpFile);
}

/////////////////////////////////////////////////////////////////////////////
void COptionsPage::OnContextMenu(CWnd* pWnd, CPoint point) 
{
    ::WinHelp( 
        pWnd->m_hWnd,
        g_szAVHelpFile,
        HELP_CONTEXTMENU,
        (DWORD_PTR) MyHelpIds );
}


/////////////////////////////////////////////////////////////////////////////
LRESULT COptionsPage::OnWizardNext() 
{
    //
    // Create the dwRegFlags that needs to be passed arround.
    //

	g_dwRegFlags = 0;
    
    for( int uCrtBit = 0; uCrtBit < ARRAY_LENGTH( g_AllNamesAndBits ); uCrtBit++ )
	{
		m_IssuesList.GetCheck( uCrtBit );
        
        if( m_IssuesList.GetCheck( uCrtBit ) )
        {
            g_dwRegFlags |= g_AllNamesAndBits[ uCrtBit ].m_dwBit;
        }
	}
    
    GoingToNextPageNotify( IDD_STARTAPP_PAGE );

    return IDD_STARTAPP_PAGE;
}

/////////////////////////////////////////////////////////////////////////////
BOOL COptionsPage::OnSetActive() 
{
    ASSERT_VALID( m_pParentSheet );

    m_pParentSheet->SetWizardButtons( PSWIZB_BACK | PSWIZB_NEXT );

    return CAppverifPage::OnSetActive();
}

/////////////////////////////////////////////////////////////////////////////
void COptionsPage::OnCheckCreateCrashDumpFile() 
{
}

/////////////////////////////////////////////////////////////////////////////
BOOL COptionsPage::OnInitDialog() 
{
    CAppverifPage::OnInitDialog();

    g_dwRegFlags = 0;
    
    m_IssuesList.SetExtendedStyle(LVS_EX_CHECKBOXES);

    m_IssuesList.InsertColumn(0, _T("Issue Description"), LVCFMT_LEFT, 250);
    
	for( int uCrtBit = 0; uCrtBit < ARRAY_LENGTH( g_AllNamesAndBits ); uCrtBit++ )
	{
		InsertIssue( g_AllNamesAndBits[ uCrtBit ].m_uNameStringId );
	}

    ExpandEnvironmentStrings(_T("%windir%\\AppVerifier.dmp"), g_szCrashDumpFile, MAX_PATH);
    
    m_CrashDumpFile.SetWindowText(g_szCrashDumpFile);

    m_CreateCrashDumpFile.SetCheck(1);

    AVSetWindowText( m_NextDescription, IDS_OPTIONS_NEXTDESCR_STATIC );
    
    return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX Property Pages should return FALSE
}

/////////////////////////////////////////////////////////////////////////////
// COptionsPage message handlers