📄 taddfileoptionsdlg.cpp
字号:
/*****************************************************************************/
/* TAddFileOptionsDlg.cpp Copyright (c) Ladislav Zezula 2003 */
/*---------------------------------------------------------------------------*/
/* Implementation for archiving flags dialog */
/*---------------------------------------------------------------------------*/
/* Date Ver Who Comment */
/* -------- ---- --- ------- */
/* 08.04.03 1.00 Lad The first version of TAddFileOptionsDlg.cpp */
/*****************************************************************************/
#include "stdafx.h"
#include "resource.h"
#include "TAddFileOptionsDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//-----------------------------------------------------------------------------
// TAddFileOptionsDlg dialog
BEGIN_MESSAGE_MAP(TAddFileOptionsDlg, CDialog)
//{{AFX_MSG_MAP(TAddFileOptionsDlg)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_FILETYPES, OnItemChanged)
ON_NOTIFY(LVN_KEYDOWN, IDC_FILETYPES, OnKeyDown)
ON_NOTIFY(LVN_BEGINLABELEDIT, IDC_FILETYPES, OnBeginLabelEdit)
ON_NOTIFY(LVN_ENDLABELEDIT, IDC_FILETYPES, OnEndLabelEdit)
ON_NOTIFY(LVN_DELETEITEM, IDC_FILETYPES, OnDeleteItem)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//-----------------------------------------------------------------------------
// Constructor and destructor
TAddFileOptionsDlg::TAddFileOptionsDlg(CWnd* pParent /*=NULL*/)
:CDialog(TAddFileOptionsDlg::IDD, pParent)
{
m_dwFlags = 0;
m_lcLocale = 0;
//{{AFX_DATA_INIT(TAddFileOptionsDlg)
m_nFileType = FILE_TYPE_DATA;
m_nDataCmp = 2;
m_nWaveCmp = 1;
m_bEncrypt = TRUE;
m_bShowOnAdd = TRUE;
//}}AFX_DATA_INIT
}
void TAddFileOptionsDlg::DoDataExchange(CDataExchange* pDX)
{
CComboBox * pCombo = (CComboBox *)GetDlgItem(IDC_LOCALES);
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(TAddFileOptionsDlg)
DDX_Control(pDX, IDC_FILETYPES, m_FileTypes);
DDX_Radio(pDX, IDC_RADIO1, m_nFileType);
DDX_Radio(pDX, IDC_RADIO3, m_nDataCmp);
DDX_Radio(pDX, IDC_RADIO6, m_nWaveCmp);
DDX_Check(pDX, IDC_ENCRYPT, m_bEncrypt);
DDX_Check(pDX, IDC_SHOWONADD, m_bShowOnAdd);
//}}AFX_DATA_MAP
// Save the input locale
if(pCombo != NULL)
{
if(pDX->m_bSaveAndValidate)
m_lcLocale = pCombo->GetItemData(pCombo->GetCurSel());
else
FillLocalesAndSelect(pCombo, m_lcLocale);
}
}
void TAddFileOptionsDlg::SelectItem(int nIndex)
{
LPARAM lParam;
RECT rect;
m_FileTypes.GetItemRect(nIndex, &rect, LVIR_BOUNDS);
lParam = MAKELPARAM(rect.left + 2, rect.top + 2);
m_FileTypes.PostMessage(WM_LBUTTONDOWN, 0, lParam);
m_FileTypes.PostMessage(WM_LBUTTONUP, 0, lParam);
}
// Called before an item selection is changed
void TAddFileOptionsDlg::SaveDialog(TAddFlags * pFlags)
{
UpdateData(TRUE);
if((pFlags->nFileType = m_nFileType) == FILE_TYPE_DATA)
pFlags->nCompression = m_nDataCmp;
else
pFlags->nCompression = m_nWaveCmp;
pFlags->bEncrypt = m_bEncrypt;
}
// Called when a new item is focused
void TAddFileOptionsDlg::LoadDialog(TAddFlags * pFlags)
{
CWnd * pWnd;
BOOL bEnable;
if((m_nFileType = pFlags->nFileType) == FILE_TYPE_DATA)
m_nDataCmp = pFlags->nCompression;
else
m_nWaveCmp = pFlags->nCompression;
m_bEncrypt = pFlags->bEncrypt;
// Enable/disable the data compression(s)
bEnable = (pFlags->nFileType == FILE_TYPE_DATA);
if((pWnd = GetDlgItem(IDC_RADIO3)) != NULL)
pWnd->EnableWindow(bEnable);
if((pWnd = GetDlgItem(IDC_RADIO4)) != NULL)
pWnd->EnableWindow(bEnable);
if((pWnd = GetDlgItem(IDC_RADIO5)) != NULL)
pWnd->EnableWindow(bEnable);
// Enable/disable the wave compressions
bEnable = (pFlags->nFileType == FILE_TYPE_WAVE);
if((pWnd = GetDlgItem(IDC_RADIO6)) != NULL)
pWnd->EnableWindow(bEnable);
if((pWnd = GetDlgItem(IDC_RADIO7)) != NULL)
pWnd->EnableWindow(bEnable);
if((pWnd = GetDlgItem(IDC_RADIO8)) != NULL)
pWnd->EnableWindow(bEnable);
UpdateData(FALSE);
}
/////////////////////////////////////////////////////////////////////////////
// TAddFileOptionsDlg message handlers
BOOL TAddFileOptionsDlg::OnInitDialog()
{
TAddFlags * pFlags = cfg.pAddFlags;
RECT rect;
CDialog::OnInitDialog();
// Initialize the listview columns
m_FileTypes.GetClientRect(&rect);
m_FileTypes.InsertColumn(0, "", LVCFMT_CENTER, rect.right - GetSystemMetrics(SM_CXVSCROLL), 0);
m_FileTypes.SetExtendedStyle(LVS_EX_FULLROWSELECT);
// Fill the list view with extensions
for(int i = 0; i < cfg.nAddFlags; i++, pFlags++)
{
TAddFlags * pFlag = new TAddFlags;
LVITEM lvItem;
char szText[0x20];
memset(szText, 0, sizeof(szText));
strncpy(szText, pFlags->Ext.szExt, sizeof(TExt));
*pFlag = *pFlags;
ZeroMemory(&lvItem, sizeof(LVITEM));
lvItem.mask = LVIF_TEXT | LVIF_PARAM;
lvItem.iItem = i;
lvItem.pszText = szText;
lvItem.lParam = (LPARAM)pFlag;
m_FileTypes.InsertItem(&lvItem);
}
// Insert the helper item and select the first item in the list view
m_FileTypes.InsertItem(i, "<...>");
SelectItem(0);
m_lcLocale = cfg.lcLocale;
m_bShowOnAdd = cfg.bShowOptionsOnAdd;
UpdateData(FALSE);
return TRUE;
}
void TAddFileOptionsDlg::OnOK()
{
TAddFlags * pFlags;
TAddFlags * pFlag;
int nItems = m_FileTypes.GetItemCount() - 1;
// Ancestor will call UpdateData
CDialog::OnOK();
// Save the add flags
pFlags = new TAddFlags[nItems];
for(int i = 0; i < nItems; i++)
{
pFlag = (TAddFlags *)m_FileTypes.GetItemData(i);
pFlags[i] = *pFlag;
}
// Update the member variables into global config
delete cfg.pAddFlags;
cfg.pAddFlags = pFlags;
cfg.nAddFlags = nItems;
cfg.lcLocale = m_lcLocale;
cfg.bShowOptionsOnAdd = m_bShowOnAdd;
}
void TAddFileOptionsDlg::OnItemChanged(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// If an item has been deselected, save the dialog content
if((pNMListView->uOldState & LVIS_SELECTED) && pNMListView->lParam != 0)
SaveDialog((TAddFlags *)pNMListView->lParam);
// If a new item has been selected, change the dialog content
if((pNMListView->uNewState & LVIS_SELECTED) && pNMListView->lParam != 0)
LoadDialog((TAddFlags *)pNMListView->lParam);
*pResult = 0;
}
void TAddFileOptionsDlg::OnKeyDown(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_KEYDOWN* pLVKeyDown = (LV_KEYDOWN*)pNMHDR;
if(pLVKeyDown->wVKey == VK_DELETE)
{
int nItems = m_FileTypes.GetItemCount();
int nItem = m_FileTypes.GetNextItem(-1, LVNI_FOCUSED);
// Ignore attempt for deleting the "Add New" helper item
if(nItems == 0 || nItem == nItems-1)
return;
// Do not allow to delete the default item
if(nItem == nItems - 2)
{
AfxMessageBox(IDS_CANTDELETEDEFADDFLAG, MB_OK | MB_ICONERROR);
return;
}
m_FileTypes.DeleteItem(nItem);
SelectItem(nItem);
}
if(pLVKeyDown->wVKey == VK_F2)
m_FileTypes.EditLabel(m_FileTypes.GetNextItem(-1, LVNI_FOCUSED));
*pResult = 0;
}
void TAddFileOptionsDlg::OnBeginLabelEdit(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
int nItems = m_FileTypes.GetItemCount();
// Allow or deny the label editing
*pResult = (pDispInfo->item.iItem != nItems - 1);
}
// When label edit ends, we have to insert the new item
void TAddFileOptionsDlg::OnEndLabelEdit(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO * pDispInfo = (LV_DISPINFO*)pNMHDR;
// If the user canceled the editing, do nothing
if(pDispInfo->item.pszText != NULL)
{
TAddFlags * pFlags = new TAddFlags;
LVITEM lvItem;
int nIndex;
// Reset both to zero
ZeroMemory(pFlags, sizeof(TAddFlags));
ZeroMemory(&lvItem, sizeof(LVITEM));
// Fill the flags
strncpy(pFlags->Ext.szExt, pDispInfo->item.pszText, sizeof(TExt));
pFlags->nFileType = FILE_TYPE_DATA;
pFlags->nCompression = 2;
pFlags->bEncrypt = TRUE;
// Fill the list view entry and insert the item
lvItem.mask = LVIF_TEXT | LVIF_PARAM;
lvItem.iItem = m_FileTypes.GetItemCount() - 2;
lvItem.pszText = pDispInfo->item.pszText;
lvItem.lParam = (LPARAM)pFlags;
nIndex = m_FileTypes.InsertItem(&lvItem);
// Focus the item
SelectItem(nIndex);
}
*pResult = 0;
}
// Called nefore an item is deleted
void TAddFileOptionsDlg::OnDeleteItem(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW * pNMListView = (NM_LISTVIEW*)pNMHDR;
if(pNMListView->lParam != 0)
delete (TAddFlags *)pNMListView->lParam;
*pResult = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -