758 lines
20 KiB
C++
758 lines
20 KiB
C++
|
/**********************************************************************/
|
||
|
/** Microsoft Windows/NT **/
|
||
|
/** Copyright(c) Microsoft Corp., 1997 **/
|
||
|
/**********************************************************************/
|
||
|
|
||
|
/*
|
||
|
sfmfasoc.cpp
|
||
|
Implementation for the file association property page.
|
||
|
|
||
|
FILE HISTORY:
|
||
|
8/20/97 ericdav Code moved into file managemnet snapin
|
||
|
|
||
|
*/
|
||
|
|
||
|
#include "stdafx.h"
|
||
|
#include "sfmcfg.h"
|
||
|
#include "sfmfasoc.h"
|
||
|
#include "sfmtypes.h"
|
||
|
#include "sfmutil.h"
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
#define new DEBUG_NEW
|
||
|
#undef THIS_FILE
|
||
|
static char THIS_FILE[] = __FILE__;
|
||
|
#endif
|
||
|
|
||
|
int CompareCreators(CAfpTypeCreator * pAfpTC1, CAfpTypeCreator * pAfpTC2)
|
||
|
{
|
||
|
CString str1, str2;
|
||
|
|
||
|
str1 = pAfpTC1->QueryCreator();
|
||
|
str2 = pAfpTC2->QueryCreator();
|
||
|
|
||
|
return lstrcmpi(str1,str2);
|
||
|
}
|
||
|
|
||
|
int CompareTypes(CAfpTypeCreator * pAfpTC1, CAfpTypeCreator * pAfpTC2)
|
||
|
{
|
||
|
CString str1, str2;
|
||
|
|
||
|
str1 = pAfpTC1->QueryType();
|
||
|
str2 = pAfpTC2->QueryType();
|
||
|
|
||
|
return lstrcmpi(str1,str2);
|
||
|
}
|
||
|
|
||
|
int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
|
||
|
{
|
||
|
CAfpTypeCreator * pAfpTC1 = (CAfpTypeCreator *) lParam1;
|
||
|
CAfpTypeCreator * pAfpTC2 = (CAfpTypeCreator *) lParam2;
|
||
|
|
||
|
CString str1, str2;
|
||
|
|
||
|
int nCompare = 0;
|
||
|
|
||
|
// special case, we want the default to show up at the top always
|
||
|
if (pAfpTC1->QueryId() == AFP_DEF_TCID)
|
||
|
return -1;
|
||
|
else if (pAfpTC2->QueryId() == AFP_DEF_TCID)
|
||
|
return 1;
|
||
|
|
||
|
switch (lParamSort)
|
||
|
{
|
||
|
// creator
|
||
|
case 0:
|
||
|
nCompare = CompareCreators(pAfpTC1, pAfpTC2);
|
||
|
if (nCompare == 0)
|
||
|
nCompare = CompareTypes(pAfpTC1, pAfpTC2);
|
||
|
break;
|
||
|
|
||
|
// type
|
||
|
case 1:
|
||
|
nCompare = CompareTypes(pAfpTC1, pAfpTC2);
|
||
|
if (nCompare == 0)
|
||
|
nCompare = CompareCreators(pAfpTC1, pAfpTC2);
|
||
|
break;
|
||
|
|
||
|
// description
|
||
|
case 2:
|
||
|
str1 = pAfpTC1->QueryComment();
|
||
|
str2 = pAfpTC2->QueryComment();
|
||
|
|
||
|
nCompare = lstrcmpi(str1,str2);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return nCompare;
|
||
|
}
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CMacFilesFileAssociation property page
|
||
|
|
||
|
IMPLEMENT_DYNCREATE(CMacFilesFileAssociation, CPropertyPage)
|
||
|
|
||
|
CMacFilesFileAssociation::CMacFilesFileAssociation() : CPropertyPage(CMacFilesFileAssociation::IDD)
|
||
|
{
|
||
|
//{{AFX_DATA_INIT(CMacFilesFileAssociation)
|
||
|
//}}AFX_DATA_INIT
|
||
|
m_nSortColumn = 0;
|
||
|
}
|
||
|
|
||
|
CMacFilesFileAssociation::~CMacFilesFileAssociation()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CMacFilesFileAssociation::DoDataExchange(CDataExchange* pDX)
|
||
|
{
|
||
|
CPropertyPage::DoDataExchange(pDX);
|
||
|
//{{AFX_DATA_MAP(CMacFilesFileAssociation)
|
||
|
DDX_Control(pDX, IDC_LIST_TYPE_CREATORS, m_listctrlCreators);
|
||
|
DDX_Control(pDX, IDC_COMBO_EXTENSION, m_comboExtension);
|
||
|
DDX_Control(pDX, IDC_BUTTON_EDIT, m_buttonEdit);
|
||
|
DDX_Control(pDX, IDC_BUTTON_DELETE, m_buttonDelete);
|
||
|
DDX_Control(pDX, IDC_BUTTON_ASSOCIATE, m_buttonAssociate);
|
||
|
DDX_Control(pDX, IDC_BUTTON_ADD, m_buttonAdd);
|
||
|
//}}AFX_DATA_MAP
|
||
|
}
|
||
|
|
||
|
|
||
|
BEGIN_MESSAGE_MAP(CMacFilesFileAssociation, CPropertyPage)
|
||
|
//{{AFX_MSG_MAP(CMacFilesFileAssociation)
|
||
|
ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)
|
||
|
ON_BN_CLICKED(IDC_BUTTON_ASSOCIATE, OnButtonAssociate)
|
||
|
ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete)
|
||
|
ON_BN_CLICKED(IDC_BUTTON_EDIT, OnButtonEdit)
|
||
|
ON_CBN_SELCHANGE(IDC_COMBO_EXTENSION, OnSelchangeComboExtension)
|
||
|
ON_CBN_EDITCHANGE(IDC_COMBO_EXTENSION, OnEditchangeComboExtension)
|
||
|
ON_NOTIFY(NM_DBLCLK, IDC_LIST_TYPE_CREATORS, OnDblclkListTypeCreators)
|
||
|
ON_WM_CLOSE()
|
||
|
ON_WM_CONTEXTMENU()
|
||
|
ON_WM_HELPINFO()
|
||
|
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_TYPE_CREATORS, OnItemchangedListTypeCreators)
|
||
|
ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST_TYPE_CREATORS, OnColumnclickListTypeCreators)
|
||
|
ON_WM_DESTROY()
|
||
|
ON_WM_COMPAREITEM()
|
||
|
ON_WM_DRAWITEM()
|
||
|
ON_WM_DELETEITEM()
|
||
|
ON_NOTIFY(LVN_DELETEITEM, IDC_LIST_TYPE_CREATORS, OnDeleteitemListTypeCreators)
|
||
|
//}}AFX_MSG_MAP
|
||
|
END_MESSAGE_MAP()
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CMacFilesFileAssociation message handlers
|
||
|
|
||
|
BOOL CMacFilesFileAssociation::OnInitDialog()
|
||
|
{
|
||
|
CPropertyPage::OnInitDialog();
|
||
|
|
||
|
m_comboExtension.LimitText(AFP_EXTENSION_LEN);
|
||
|
|
||
|
InitListCtrl();
|
||
|
|
||
|
//
|
||
|
// Fill in the data from the server for extensions and type creators
|
||
|
//
|
||
|
Update();
|
||
|
|
||
|
return TRUE; // return TRUE unless you set the focus to a control
|
||
|
// EXCEPTION: OCX Property Pages should return FALSE
|
||
|
}
|
||
|
|
||
|
void CMacFilesFileAssociation::OnButtonAdd()
|
||
|
{
|
||
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
||
|
|
||
|
CTypeCreatorAddDlg dlgAdd(&m_listctrlCreators, m_pSheet->m_hAfpServer, m_pSheet->m_strHelpFilePath);
|
||
|
|
||
|
CThemeContextActivator activator;
|
||
|
if (dlgAdd.DoModal() == IDOK)
|
||
|
{
|
||
|
//
|
||
|
// Refresh the dialog
|
||
|
//
|
||
|
DWORD err = Refresh();
|
||
|
if ( err != NO_ERROR )
|
||
|
{
|
||
|
::SFMMessageBox(err);
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
SelectTypeCreator(dlgAdd.m_strCreator, dlgAdd.m_strType);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CMacFilesFileAssociation::OnButtonEdit()
|
||
|
{
|
||
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
||
|
|
||
|
CAfpTypeCreator * pAfpTC = GetTCObject(-1); // Get current TC Object
|
||
|
if (!pAfpTC)
|
||
|
return;
|
||
|
|
||
|
CTypeCreatorEditDlg dlgEdit(pAfpTC, m_pSheet->m_hAfpServer, m_pSheet->m_strHelpFilePath);
|
||
|
|
||
|
CThemeContextActivator activator;
|
||
|
if (dlgEdit.DoModal() == IDOK)
|
||
|
{
|
||
|
//
|
||
|
// Refresh the dialog.
|
||
|
//
|
||
|
DWORD err = Refresh();
|
||
|
if ( err != NO_ERROR )
|
||
|
{
|
||
|
::SFMMessageBox(err);
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (m_buttonEdit.GetButtonStyle() == BS_DEFPUSHBUTTON)
|
||
|
m_buttonEdit.SetFocus();
|
||
|
}
|
||
|
|
||
|
void CMacFilesFileAssociation::OnButtonAssociate()
|
||
|
{
|
||
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
||
|
|
||
|
//
|
||
|
// The user pressed the Associate button. So associate the currently
|
||
|
// selected Extension with the currently selected type/creator.
|
||
|
//
|
||
|
AFP_TYPE_CREATOR AfpTypeCreator;
|
||
|
AFP_EXTENSION AfpExtension;
|
||
|
DWORD err;
|
||
|
CString strExtension;
|
||
|
|
||
|
if ( !g_SfmDLL.LoadFunctionPointers() )
|
||
|
return;
|
||
|
|
||
|
m_comboExtension.GetWindowText(strExtension);
|
||
|
strExtension.MakeUpper();
|
||
|
|
||
|
::ZeroMemory(&AfpTypeCreator, sizeof(AfpTypeCreator));
|
||
|
::ZeroMemory(&AfpExtension, sizeof(AfpExtension));
|
||
|
|
||
|
::CopyMemory(AfpExtension.afpe_extension, (LPCTSTR) strExtension, strExtension.GetLength() * sizeof(TCHAR));
|
||
|
|
||
|
CAfpTypeCreator * pAfpTC = GetTCObject(-1); // Get Current TC Object
|
||
|
if (!pAfpTC)
|
||
|
return;
|
||
|
|
||
|
::CopyMemory(AfpTypeCreator.afptc_creator, pAfpTC->QueryCreator(), pAfpTC->QueryCreatorLength() * sizeof(TCHAR));
|
||
|
::CopyMemory(AfpTypeCreator.afptc_type, pAfpTC->QueryType(), pAfpTC->QueryTypeLength() * sizeof(TCHAR));
|
||
|
::CopyMemory(AfpTypeCreator.afptc_comment, pAfpTC->QueryComment(), pAfpTC->QueryCommentLength() * sizeof(TCHAR));
|
||
|
|
||
|
AfpTypeCreator.afptc_id = pAfpTC->QueryId();
|
||
|
|
||
|
err = ((ETCMAPASSOCIATEPROC) g_SfmDLL[AFP_ETC_MAP_ASSOCIATE])(m_pSheet->m_hAfpServer,
|
||
|
&AfpTypeCreator,
|
||
|
&AfpExtension );
|
||
|
if ( err != NO_ERROR )
|
||
|
{
|
||
|
::SFMMessageBox(err);
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Refresh the dialog
|
||
|
//
|
||
|
err = Refresh();
|
||
|
if ( err != NO_ERROR )
|
||
|
{
|
||
|
::SFMMessageBox(err);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CMacFilesFileAssociation::OnButtonDelete()
|
||
|
{
|
||
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
||
|
|
||
|
//
|
||
|
// The user pressed the Delete button. Delete the currently
|
||
|
// selected type/creator pair
|
||
|
//
|
||
|
AFP_TYPE_CREATOR AfpTypeCreator;
|
||
|
CAfpTypeCreator * pAfpTC = GetTCObject(-1); // Get Current TC Object
|
||
|
if (!pAfpTC)
|
||
|
return;
|
||
|
|
||
|
DWORD err;
|
||
|
|
||
|
if ( !g_SfmDLL.LoadFunctionPointers() )
|
||
|
return;
|
||
|
|
||
|
//
|
||
|
// First warn the user.
|
||
|
//
|
||
|
if (::AfxMessageBox(IDS_DELETE_TC_CONFIRM,
|
||
|
MB_ICONEXCLAMATION | MB_YESNO) == IDNO )
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
|
||
|
::ZeroMemory( &AfpTypeCreator, sizeof(AfpTypeCreator) );
|
||
|
|
||
|
CopyMemory(AfpTypeCreator.afptc_creator,
|
||
|
pAfpTC->QueryCreator(),
|
||
|
pAfpTC->QueryCreatorLength() * sizeof(TCHAR));
|
||
|
|
||
|
CopyMemory(AfpTypeCreator.afptc_type,
|
||
|
pAfpTC->QueryType(),
|
||
|
pAfpTC->QueryTypeLength() * sizeof(TCHAR));
|
||
|
|
||
|
err = ((ETCMAPDELETEPROC) g_SfmDLL[AFP_ETC_MAP_DELETE])(m_pSheet->m_hAfpServer, &AfpTypeCreator);
|
||
|
if ( err != NO_ERROR )
|
||
|
{
|
||
|
::SFMMessageBox(err);
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Refresh the dialog.
|
||
|
//
|
||
|
err = Refresh();
|
||
|
if ( err != NO_ERROR )
|
||
|
{
|
||
|
::SFMMessageBox(err);
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if ((m_buttonDelete.GetButtonStyle() == BS_DEFPUSHBUTTON) ||
|
||
|
(m_buttonEdit.GetButtonStyle() == BS_DEFPUSHBUTTON))
|
||
|
{
|
||
|
//
|
||
|
// The delete button has focus so we need to move
|
||
|
// the focus elsewhere because this button will be
|
||
|
// disabled. Let's set it to the add button.
|
||
|
//
|
||
|
m_buttonAdd.SetFocus();
|
||
|
m_buttonAdd.SetButtonStyle(BS_DEFPUSHBUTTON);
|
||
|
m_buttonDelete.SetButtonStyle(BS_PUSHBUTTON);
|
||
|
m_buttonEdit.SetButtonStyle(BS_PUSHBUTTON);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CMacFilesFileAssociation::OnSelchangeComboExtension()
|
||
|
{
|
||
|
int nCurIndex = m_comboExtension.GetCurSel();
|
||
|
|
||
|
if (nCurIndex != -1)
|
||
|
{
|
||
|
//
|
||
|
// Select the matching type creator (if exists) and enable associate button
|
||
|
//
|
||
|
SelectTypeCreator((DWORD)m_comboExtension.GetItemData(nCurIndex));
|
||
|
m_buttonAssociate.EnableWindow(TRUE);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_buttonAssociate.EnableWindow(FALSE);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void CMacFilesFileAssociation::OnEditchangeComboExtension()
|
||
|
{
|
||
|
CString strCurText;
|
||
|
|
||
|
m_comboExtension.GetWindowText(strCurText);
|
||
|
strCurText.MakeUpper();
|
||
|
|
||
|
if (strCurText.IsEmpty())
|
||
|
{
|
||
|
//
|
||
|
// User cleared out the edit box, go to the default type creator
|
||
|
//
|
||
|
m_buttonAssociate.EnableWindow(FALSE);
|
||
|
SelectTypeCreator(AFP_DEF_TCID);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
int nIndexFound = m_comboExtension.FindStringExact(-1, strCurText);
|
||
|
if (nIndexFound != CB_ERR)
|
||
|
{
|
||
|
//
|
||
|
// See if what the user has typed matches an extension in the listbox.
|
||
|
// Set the item to be the current one.
|
||
|
//
|
||
|
SelectTypeCreator((DWORD)m_comboExtension.GetItemData(nIndexFound));
|
||
|
}
|
||
|
|
||
|
m_buttonAssociate.EnableWindow(TRUE);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CMacFilesFileAssociation::OnDblclkListTypeCreators(NMHDR* /*pNMHDR*/, LRESULT* pResult)
|
||
|
{
|
||
|
CAfpTypeCreator * pAfpTC = GetTCObject(-1); // Get Current TC Object
|
||
|
|
||
|
//
|
||
|
// Do not allow editing of the default type/creator
|
||
|
//
|
||
|
if (pAfpTC && pAfpTC->QueryId() != AFP_DEF_TCID)
|
||
|
OnButtonEdit();
|
||
|
|
||
|
*pResult = 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CMacFilesFileAssociation helper functions
|
||
|
|
||
|
void CMacFilesFileAssociation::EnableControls(BOOL fEnable)
|
||
|
{
|
||
|
|
||
|
if (fEnable)
|
||
|
{
|
||
|
m_buttonDelete.EnableWindow(TRUE);
|
||
|
m_buttonEdit.EnableWindow(TRUE);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if ( (m_buttonEdit.GetState() & 0x0008) ||
|
||
|
(m_buttonDelete.GetState() & 0x0008) )
|
||
|
{
|
||
|
//m_listctrlCreators.SetFocus();
|
||
|
}
|
||
|
|
||
|
m_buttonDelete.EnableWindow(FALSE);
|
||
|
m_buttonEdit.EnableWindow(FALSE);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
DWORD CMacFilesFileAssociation::SelectTypeCreator(DWORD dwId)
|
||
|
{
|
||
|
DWORD dwIdSelected = (DWORD)-1;
|
||
|
|
||
|
//
|
||
|
// Find the corresponding type creator if there is one
|
||
|
// and select it
|
||
|
//
|
||
|
for (int i = 0; i < m_listctrlCreators.GetItemCount(); i++)
|
||
|
{
|
||
|
CAfpTypeCreator * pAfpTC = GetTCObject(i); // Get TC object associated with this item
|
||
|
|
||
|
if (pAfpTC && pAfpTC->QueryId() == dwId)
|
||
|
{
|
||
|
SetCurSel(i);
|
||
|
dwIdSelected = pAfpTC->QueryId();
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (dwIdSelected == AFP_DEF_TCID || dwIdSelected == (DWORD)-1)
|
||
|
EnableControls(FALSE);
|
||
|
else
|
||
|
EnableControls(TRUE);
|
||
|
|
||
|
return dwIdSelected;
|
||
|
}
|
||
|
|
||
|
DWORD CMacFilesFileAssociation::SelectTypeCreator(CString & strCreator, CString & strType)
|
||
|
{
|
||
|
DWORD dwIdSelected = (DWORD)-1;
|
||
|
|
||
|
//
|
||
|
// Find the corresponding type creator if there is one
|
||
|
// and select it
|
||
|
//
|
||
|
for (int i = 0; i < m_listctrlCreators.GetItemCount(); i++)
|
||
|
{
|
||
|
CAfpTypeCreator * pAfpTC = GetTCObject(i); // Get TC object associated with this item
|
||
|
|
||
|
if ( pAfpTC &&
|
||
|
(lstrcmp(strCreator, pAfpTC->QueryCreator()) == 0) &&
|
||
|
(lstrcmp(strType, pAfpTC->QueryType()) == 0) )
|
||
|
{
|
||
|
SetCurSel(i);
|
||
|
dwIdSelected = pAfpTC->QueryId();
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (dwIdSelected == AFP_DEF_TCID || dwIdSelected == (DWORD)-1)
|
||
|
EnableControls(FALSE);
|
||
|
else
|
||
|
EnableControls(TRUE);
|
||
|
|
||
|
return dwIdSelected;
|
||
|
}
|
||
|
|
||
|
DWORD CMacFilesFileAssociation::Update()
|
||
|
{
|
||
|
PAFP_ETCMAP_INFO pAfpEtcMapInfo = NULL;
|
||
|
DWORD err;
|
||
|
|
||
|
if ( !g_SfmDLL.LoadFunctionPointers() )
|
||
|
return S_OK;
|
||
|
|
||
|
//
|
||
|
// Get the new data
|
||
|
//
|
||
|
err = ((ETCMAPGETINFOPROC) g_SfmDLL[AFP_ETC_MAP_GET_INFO])(m_pSheet->m_hAfpServer,
|
||
|
(LPBYTE *)&pAfpEtcMapInfo);
|
||
|
if ( err != NO_ERROR )
|
||
|
{
|
||
|
//
|
||
|
// Couldn't get the info...
|
||
|
//
|
||
|
return err;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Update the extensions COMBOBOX.
|
||
|
//
|
||
|
m_comboExtension.ResetContent();
|
||
|
PAFP_EXTENSION pAfpExtensions = pAfpEtcMapInfo->afpetc_extension;
|
||
|
|
||
|
for (UINT i = 0; i < pAfpEtcMapInfo->afpetc_num_extensions; i++)
|
||
|
{
|
||
|
int nIndex = m_comboExtension.AddString(pAfpExtensions->afpe_extension);
|
||
|
m_comboExtension.SetItemData(nIndex, pAfpExtensions->afpe_tcid);
|
||
|
|
||
|
pAfpExtensions++;
|
||
|
}
|
||
|
|
||
|
m_comboExtension.SetCurSel(-1);
|
||
|
m_buttonAssociate.EnableWindow(FALSE);
|
||
|
|
||
|
//
|
||
|
// Update the type/creator listbox
|
||
|
//
|
||
|
//
|
||
|
// let's nuke everything in the listbox.
|
||
|
//
|
||
|
ClearListCtrl();
|
||
|
|
||
|
PAFP_TYPE_CREATOR pAfpTypeCreators = pAfpEtcMapInfo->afpetc_type_creator;
|
||
|
|
||
|
for (i = 0; i < pAfpEtcMapInfo->afpetc_num_type_creators; i++)
|
||
|
{
|
||
|
CAfpTypeCreator * pItemData = new CAfpTypeCreator(pAfpTypeCreators);
|
||
|
|
||
|
InsertItem(pItemData);
|
||
|
|
||
|
pAfpTypeCreators++;
|
||
|
}
|
||
|
|
||
|
if ( pAfpEtcMapInfo != NULL )
|
||
|
{
|
||
|
((SFMBUFFERFREEPROC) g_SfmDLL[AFP_BUFFER_FREE])(pAfpEtcMapInfo);
|
||
|
}
|
||
|
|
||
|
m_listctrlCreators.SortItems(CompareFunc, m_nSortColumn);
|
||
|
|
||
|
//
|
||
|
// Set the current selection to be the default type creator
|
||
|
//
|
||
|
SelectTypeCreator(AFP_DEF_TCID);
|
||
|
|
||
|
return NO_ERROR;
|
||
|
}
|
||
|
|
||
|
void CMacFilesFileAssociation::InitListCtrl()
|
||
|
{
|
||
|
CString strText;
|
||
|
|
||
|
strText.LoadString(IDS_CREATOR);
|
||
|
m_listctrlCreators.InsertColumn(0, strText, LVCFMT_LEFT, 50);
|
||
|
|
||
|
strText.LoadString(IDS_TYPE);
|
||
|
m_listctrlCreators.InsertColumn(1, strText, LVCFMT_LEFT, 50);
|
||
|
|
||
|
strText.LoadString(IDS_DESCRIPTION);
|
||
|
m_listctrlCreators.InsertColumn(2, strText, LVCFMT_LEFT, 175);
|
||
|
|
||
|
ListView_SetExtendedListViewStyle(m_listctrlCreators.GetSafeHwnd(), LVS_EX_FULLROWSELECT);
|
||
|
}
|
||
|
|
||
|
void CMacFilesFileAssociation::ClearListCtrl()
|
||
|
{
|
||
|
m_listctrlCreators.DeleteAllItems();
|
||
|
}
|
||
|
|
||
|
void CMacFilesFileAssociation::InsertItem(CAfpTypeCreator * pItemData)
|
||
|
{
|
||
|
int nIndex = m_listctrlCreators.InsertItem(0, pItemData->QueryCreator());
|
||
|
m_listctrlCreators.SetItemText(nIndex, 1, pItemData->QueryType());
|
||
|
m_listctrlCreators.SetItemText(nIndex, 2, pItemData->QueryComment());
|
||
|
|
||
|
m_listctrlCreators.SetItemData(nIndex, (DWORD_PTR) pItemData);
|
||
|
}
|
||
|
|
||
|
void CMacFilesFileAssociation::SetCurSel(int nIndex)
|
||
|
{
|
||
|
LV_ITEM lvItem;
|
||
|
|
||
|
ZeroMemory(&lvItem, sizeof(lvItem));
|
||
|
|
||
|
lvItem.iItem = nIndex;
|
||
|
lvItem.mask = LVIF_STATE;
|
||
|
lvItem.stateMask = LVIS_SELECTED | LVIS_FOCUSED;
|
||
|
lvItem.state = LVIS_SELECTED | LVIS_FOCUSED;
|
||
|
|
||
|
m_listctrlCreators.SetItem(&lvItem);
|
||
|
|
||
|
m_listctrlCreators.EnsureVisible(nIndex, FALSE);
|
||
|
}
|
||
|
|
||
|
int CMacFilesFileAssociation::GetCurSel()
|
||
|
{
|
||
|
return m_listctrlCreators.GetNextItem(-1, LVNI_SELECTED);
|
||
|
}
|
||
|
|
||
|
DWORD CMacFilesFileAssociation::Refresh()
|
||
|
{
|
||
|
//
|
||
|
// Find out the type creator that has the current focus.
|
||
|
//
|
||
|
CAfpTypeCreator * pAfpTC = GetTCObject(-1); // Get Current TC Object
|
||
|
if (!pAfpTC)
|
||
|
return NO_ERROR;
|
||
|
|
||
|
DWORD dwIdCreator = pAfpTC->QueryId();
|
||
|
|
||
|
CWnd * pFocusWnd = CWnd::GetFocus();
|
||
|
|
||
|
//
|
||
|
// Find out the extension that has the current focus
|
||
|
//
|
||
|
DWORD err;
|
||
|
CString strCurExtension;
|
||
|
|
||
|
m_comboExtension.GetWindowText(strCurExtension);
|
||
|
strCurExtension.MakeUpper();
|
||
|
|
||
|
if ( (err = Update()) != NO_ERROR )
|
||
|
{
|
||
|
if (pFocusWnd)
|
||
|
pFocusWnd->SetFocus();
|
||
|
|
||
|
return err;
|
||
|
}
|
||
|
|
||
|
DWORD dwIdSelected = SelectTypeCreator(dwIdCreator);
|
||
|
|
||
|
//
|
||
|
// Set the extension to what it was before
|
||
|
//
|
||
|
if (strCurExtension.IsEmpty())
|
||
|
{
|
||
|
m_buttonAssociate.EnableWindow(FALSE);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_comboExtension.SetWindowText(strCurExtension);
|
||
|
m_buttonAssociate.EnableWindow(TRUE);
|
||
|
}
|
||
|
|
||
|
if (pFocusWnd)
|
||
|
pFocusWnd->SetFocus();
|
||
|
|
||
|
return NO_ERROR;
|
||
|
}
|
||
|
|
||
|
CAfpTypeCreator * CMacFilesFileAssociation::GetTCObject(int nIndex)
|
||
|
{
|
||
|
if (-1 == nIndex)
|
||
|
nIndex = GetCurSel();
|
||
|
|
||
|
if (-1 == nIndex)
|
||
|
return NULL;
|
||
|
|
||
|
return (CAfpTypeCreator *) m_listctrlCreators.GetItemData(nIndex);
|
||
|
}
|
||
|
|
||
|
void CMacFilesFileAssociation::OnClose()
|
||
|
{
|
||
|
ClearListCtrl();
|
||
|
|
||
|
m_comboExtension.ResetContent();
|
||
|
|
||
|
CPropertyPage::OnClose();
|
||
|
}
|
||
|
|
||
|
BOOL CMacFilesFileAssociation::OnHelpInfo(HELPINFO* pHelpInfo)
|
||
|
{
|
||
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
||
|
|
||
|
if (pHelpInfo->iContextType == HELPINFO_WINDOW)
|
||
|
{
|
||
|
::WinHelp ((HWND)pHelpInfo->hItemHandle,
|
||
|
m_pSheet->m_strHelpFilePath,
|
||
|
HELP_WM_HELP,
|
||
|
g_aHelpIDs_CONFIGURE_SFM);
|
||
|
}
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
void CMacFilesFileAssociation::OnContextMenu(CWnd* pWnd, CPoint /*point*/)
|
||
|
{
|
||
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
||
|
|
||
|
if (this == pWnd)
|
||
|
return;
|
||
|
|
||
|
::WinHelp (pWnd->m_hWnd,
|
||
|
m_pSheet->m_strHelpFilePath,
|
||
|
HELP_CONTEXTMENU,
|
||
|
g_aHelpIDs_CONFIGURE_SFM);
|
||
|
}
|
||
|
|
||
|
void CMacFilesFileAssociation::OnItemchangedListTypeCreators(NMHDR* pNMHDR, LRESULT* pResult)
|
||
|
{
|
||
|
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
|
||
|
|
||
|
//
|
||
|
// Get the selected item's data which points to a TypeCreator object.
|
||
|
// Check the ID of that object to see how we should enable the buttons.
|
||
|
//
|
||
|
if (pNMListView->uNewState & LVIS_SELECTED)
|
||
|
{
|
||
|
CAfpTypeCreator * pAfpTC = GetTCObject(-1); // Get Current TC Object
|
||
|
if (pAfpTC)
|
||
|
{
|
||
|
DWORD dwId = pAfpTC->QueryId();
|
||
|
|
||
|
if (dwId == AFP_DEF_TCID || dwId == (DWORD)-1)
|
||
|
EnableControls(FALSE);
|
||
|
else
|
||
|
EnableControls(TRUE);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
*pResult = 0;
|
||
|
}
|
||
|
|
||
|
void CMacFilesFileAssociation::OnColumnclickListTypeCreators(NMHDR* pNMHDR, LRESULT* pResult)
|
||
|
{
|
||
|
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
|
||
|
|
||
|
m_nSortColumn = pNMListView->iSubItem;
|
||
|
m_listctrlCreators.SortItems(CompareFunc, m_nSortColumn);
|
||
|
|
||
|
*pResult = 0;
|
||
|
}
|
||
|
|
||
|
void CMacFilesFileAssociation::OnDestroy()
|
||
|
{
|
||
|
CPropertyPage::OnDestroy();
|
||
|
|
||
|
ClearListCtrl();
|
||
|
|
||
|
m_comboExtension.ResetContent();
|
||
|
}
|
||
|
|
||
|
void CMacFilesFileAssociation::OnDeleteitemListTypeCreators(NMHDR* pNMHDR, LRESULT* pResult)
|
||
|
{
|
||
|
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
|
||
|
|
||
|
delete (CAfpTypeCreator *) pNMListView->lParam;
|
||
|
|
||
|
*pResult = 0;
|
||
|
}
|