2020-09-30 17:12:29 +02:00

259 lines
6.4 KiB
C++

/************************************************************************
* *
* FORAGEDL.CPP *
* *
* Copyright (C) Microsoft Corporation 1995 *
* All Rights reserved. *
* *
************************************************************************/
#include "stdafx.h"
#include "resource.h"
#pragma hdrstop
#include "foragedl.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CForageDlg dialog
CForageDlg::CForageDlg(CString* pcszHelpFile, CString* pcszOutFile,
FORAGE_CMD* pfForage, CWnd* pParent /*=NULL*/)
: CDialog(CForageDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CForageDlg)
m_cszHelpFile = *pcszHelpFile;
m_cszOutputFile = *pcszOutFile;
//}}AFX_DATA_INIT
pfForageCmd = pfForage;
pszSaveHelpFile = pcszHelpFile;
pszSaveOutFile = pcszOutFile;
pforageFile = new CFileHistory(IDS_HISTORY_FORAGE);
pcomboHlp = NULL;
}
CForageDlg::~CForageDlg()
{
delete pforageFile;
}
void CForageDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CForageDlg)
DDX_CBString(pDX, IDC_COMBO_HELP_FILES, m_cszHelpFile);
DDV_MaxChars(pDX, m_cszHelpFile, 256);
DDV_EmptyFile(pDX, m_cszHelpFile, IDS_PROMPT_EMPTY_FILENAME);
DDX_CBString(pDX, IDC_COMBO_FORAGE_FILES, m_cszOutputFile);
DDV_MaxChars(pDX, m_cszOutputFile, 256);
//}}AFX_DATA_MAP
if (pDX->m_bSaveAndValidate) {
int id = GetCheckedRadioButton(IDC_LIST_TITLES, IDC_LIST_ALINK);
if (id != IDC_MULTI_INDEX)
DDV_EmptyFile(pDX, m_cszOutputFile, IDS_OUTPUT_REQUIRED);
}
if (!pcomboHlp)
pcomboHlp = (CComboBox*) GetDlgItem(IDC_COMBO_HELP_FILES);
// make certain we have a filename
if (!pDX->m_bSaveAndValidate) {
phlpFile->FillComboBox(pcomboHlp);
pforageFile->FillComboBox(
(CComboBox*) GetDlgItem(IDC_COMBO_FORAGE_FILES));
((CButton*) GetDlgItem(IDOK))->EnableWindow(FALSE);
switch (*pfForageCmd) {
case ForageRegions:
CheckDlgButton(IDC_LIST_REGION, TRUE);
break;
case ForageStructs:
CheckDlgButton(IDC_LIST_STRUCTURE, TRUE);
break;
case ForageText:
CheckDlgButton(IDC_LIST_TEXT, TRUE);
break;
case ForageKLinkInfo:
CheckDlgButton(IDC_LIST_KLINK, TRUE);
break;
case ForageBindings:
CheckDlgButton(IDC_LIST_BINDINGS, TRUE);
break;
case ForageHash:
CheckDlgButton(IDC_LIST_HASH, TRUE);
break;
case ForageALinkInfo:
CheckDlgButton(IDC_LIST_ALINK, TRUE);
break;
case ForageTopics:
default:
CheckDlgButton(IDC_LIST_TITLES, TRUE);
break;
}
SetChicagoDialogStyles(m_hWnd);
// If a filename wasn't specified when we were called, then
// select the first filename in our list, which will be the
// last filename compiled.
if (m_cszHelpFile.IsEmpty()) {
pcomboHlp->SetCurSel(0);
pcomboHlp->SetEditSel(0, -1);
((CButton*) GetDlgItem(IDOK))->EnableWindow(
pcomboHlp->GetCount() ? TRUE : FALSE);
}
else
((CButton*) GetDlgItem(IDOK))->EnableWindow(TRUE);
if (m_cszOutputFile.IsEmpty()) {
((CComboBox*) GetDlgItem(IDC_COMBO_FORAGE_FILES))->
SetCurSel(0);
((CComboBox*) GetDlgItem(IDC_COMBO_FORAGE_FILES))->
SetEditSel(0, -1);
}
}
else {
switch (GetCheckedRadioButton(IDC_LIST_TITLES, IDC_LIST_ALINK)) {
case IDC_LIST_TITLES:
*pfForageCmd = ForageTopics;
break;
case IDC_LIST_BINDINGS:
*pfForageCmd = ForageBindings;
break;
case IDC_LIST_HASH:
*pfForageCmd = ForageHash;
break;
case IDC_LIST_REGION:
*pfForageCmd = ForageRegions;
break;
case IDC_LIST_STRUCTURE:
*pfForageCmd = ForageStructs;
break;
case IDC_LIST_TEXT:
*pfForageCmd = ForageText;
break;
case IDC_LIST_KLINK:
*pfForageCmd = ForageKLinkInfo;
break;
case IDC_LIST_ALINK:
*pfForageCmd = ForageALinkInfo;
break;
}
*pszSaveOutFile = m_cszOutputFile;
pforageFile->Add(m_cszOutputFile);
*pszSaveHelpFile = m_cszHelpFile;
phlpFile->Add(m_cszHelpFile);
}
}
BEGIN_MESSAGE_MAP(CForageDlg, CDialog)
//{{AFX_MSG_MAP(CForageDlg)
ON_BN_CLICKED(IDC_BROWSE, OnBrowse)
ON_CBN_CLOSEUP(IDC_COMBO_HELP_FILES, OnCloseupComboHelpFiles)
ON_CBN_EDITCHANGE(IDC_COMBO_HELP_FILES, OnEditchangeComboHelpFiles)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_CONTEXTMENU, OnContextMenu)
ON_MESSAGE(WM_HELP, OnHelp)
END_MESSAGE_MAP()
void CForageDlg::OnBrowse()
{
CStr cszExt(IDS_EXT_HLP);
CFileDialog cfdlg(TRUE, cszExt, NULL,
OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST,
GetStringResource(IDS_HLP_EXTENSION));
if (cfdlg.DoModal() == IDOK) {
/*
* Contrary to the docs, the extension is not always added,
* so we make sure it gets added here.
*/
char szFile[_MAX_PATH];
strcpy(szFile, cfdlg.GetPathName());
PSTR psz = StrRChr(szFile, '.', _fDBCSSystem);
if (!psz)
ChangeExtension(szFile, cszExt);
pcomboHlp->SetWindowText(cfdlg.GetPathName());
((CButton*) GetDlgItem(IDOK))->EnableWindow(
(pcomboHlp->GetWindowTextLength() > 0));
}
}
void CForageDlg::OnCloseupComboHelpFiles()
{
/*
* The text (if any) hasn't been filled in at this point, so we
* have no way of knowing whether or not the edit field contains
* anything as a result of closing the combo-box. So, we just post
* ourselves a change message to check after the combo-box has
* finished filling in the edit control.
*/
PostMessage(WM_COMMAND, IDC_COMBO_HELP_FILES,
MAKELPARAM(GetDlgItem(IDC_COMBO_HELP_FILES)->m_hWnd,
CBN_EDITCHANGE));
}
void CForageDlg::OnEditchangeComboHelpFiles()
{
// Enable OK button if combo text box is non-zero
((CButton*) GetDlgItem(IDOK))->EnableWindow(
(pcomboHlp->GetWindowTextLength() > 0));
}
static const DWORD aHelpIds[] = {
IDC_COMBO_HELP_FILES, IDH_COMBO_REPORT_HELP,
IDC_BROWSE, IDH_BTN_REPORT_BROWSE,
IDC_COMBO_FORAGE_FILES, IDH_COMBO_REPORT_OUTPUT,
IDC_LIST_TITLES, IDH_LIST_TITLES,
IDC_LIST_HASH, IDH_LIST_HASH,
IDC_LIST_KLINK, IDH_LIST_K_KEYWORDS,
IDC_LIST_ALINK, IDH_LIST_A_KEYWORDS,
IDC_LIST_TEXT, IDH_LIST_TEXT,
IDOK, IDH_BTN_REPORT_OKAY,
IDC_GROUP, (DWORD) -1L,
0, 0
};
LRESULT CForageDlg::OnContextMenu(WPARAM wParam, LPARAM lParam)
{
::WinHelp((HWND) wParam,
AfxGetApp()->m_pszHelpFilePath,
HELP_CONTEXTMENU, (DWORD) (LPVOID) aHelpIds);
return 0;
}
LRESULT CForageDlg::OnHelp(WPARAM wParam, LPARAM lParam)
{
::WinHelp((HWND) ((LPHELPINFO) lParam)->hItemHandle,
AfxGetApp()->m_pszHelpFilePath,
HELP_WM_HELP, (DWORD) (LPVOID) aHelpIds);
return 0;
}