395 lines
9.8 KiB
C++
395 lines
9.8 KiB
C++
|
|
// TaskPageButtons.cpp : implementation file
|
||
|
|
//
|
||
|
|
|
||
|
|
#include "stdafx.h"
|
||
|
|
#include "VistaTaskDialog.h"
|
||
|
|
#include "TaskSheetProperties.h"
|
||
|
|
#include "TaskPageButtons.h"
|
||
|
|
#include "TaskEditButtonDlg.h"
|
||
|
|
|
||
|
|
#ifdef _DEBUG
|
||
|
|
#define new DEBUG_NEW
|
||
|
|
#undef THIS_FILE
|
||
|
|
static char THIS_FILE[] = __FILE__;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
// CTaskPageButtons property page
|
||
|
|
|
||
|
|
IMPLEMENT_DYNCREATE(CTaskPageButtons, CPropertyPage)
|
||
|
|
|
||
|
|
CTaskPageButtons::CTaskPageButtons() : CPropertyPage(CTaskPageButtons::IDD)
|
||
|
|
{
|
||
|
|
//{{AFX_DATA_INIT(CTaskPageButtons)
|
||
|
|
m_bCancel = FALSE;
|
||
|
|
m_bClose = FALSE;
|
||
|
|
m_bShowIcons = TRUE;
|
||
|
|
m_bNo = FALSE;
|
||
|
|
m_bOk = FALSE;
|
||
|
|
m_bRetry = FALSE;
|
||
|
|
m_bUseLinks = FALSE;
|
||
|
|
m_bYes = FALSE;
|
||
|
|
//}}AFX_DATA_INIT
|
||
|
|
|
||
|
|
XTPResourceManager()->LoadString(&m_strOk, XTP_IDS_TASK_OK);
|
||
|
|
XTPDrawHelpers()->StripMnemonics(m_strOk);
|
||
|
|
|
||
|
|
XTPResourceManager()->LoadString(&m_strYes, XTP_IDS_TASK_YES);
|
||
|
|
XTPDrawHelpers()->StripMnemonics(m_strYes);
|
||
|
|
|
||
|
|
XTPResourceManager()->LoadString(&m_strNo, XTP_IDS_TASK_NO);
|
||
|
|
XTPDrawHelpers()->StripMnemonics(m_strNo);
|
||
|
|
|
||
|
|
XTPResourceManager()->LoadString(&m_strCancel, XTP_IDS_TASK_CANCEL);
|
||
|
|
XTPDrawHelpers()->StripMnemonics(m_strCancel);
|
||
|
|
|
||
|
|
XTPResourceManager()->LoadString(&m_strRetry, XTP_IDS_TASK_RETRY);
|
||
|
|
XTPDrawHelpers()->StripMnemonics(m_strRetry);
|
||
|
|
|
||
|
|
XTPResourceManager()->LoadString(&m_strClose, XTP_IDS_TASK_CLOSE);
|
||
|
|
XTPDrawHelpers()->StripMnemonics(m_strClose);
|
||
|
|
}
|
||
|
|
|
||
|
|
CTaskPageButtons::~CTaskPageButtons()
|
||
|
|
{
|
||
|
|
}
|
||
|
|
|
||
|
|
void CTaskPageButtons::DoDataExchange(CDataExchange* pDX)
|
||
|
|
{
|
||
|
|
CPropertyPage::DoDataExchange(pDX);
|
||
|
|
//{{AFX_DATA_MAP(CTaskPageButtons)
|
||
|
|
DDX_Control(pDX, IDC_BTN_REMOVE, m_btnRemove);
|
||
|
|
DDX_Control(pDX, IDC_BTN_EDIT, m_btnEdit);
|
||
|
|
DDX_Control(pDX, IDC_BTN_ADD, m_btnAdd);
|
||
|
|
DDX_Control(pDX, IDC_LIST_CUSTOM, m_listCustom);
|
||
|
|
DDX_Control(pDX, IDC_COMBO_DEFAULT, m_comboDefault);
|
||
|
|
DDX_Check(pDX, IDC_CHK_CANCEL, m_bCancel);
|
||
|
|
DDX_Check(pDX, IDC_CHK_CLOSE, m_bClose);
|
||
|
|
DDX_Check(pDX, IDC_CHK_SHOWICONS, m_bShowIcons);
|
||
|
|
DDX_Check(pDX, IDC_CHK_NO, m_bNo);
|
||
|
|
DDX_Check(pDX, IDC_CHK_OK, m_bOk);
|
||
|
|
DDX_Check(pDX, IDC_CHK_RETRY, m_bRetry);
|
||
|
|
DDX_Check(pDX, IDC_CHK_USELINKS, m_bUseLinks);
|
||
|
|
DDX_Check(pDX, IDC_CHK_YES, m_bYes);
|
||
|
|
//}}AFX_DATA_MAP
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
BEGIN_MESSAGE_MAP(CTaskPageButtons, CPropertyPage)
|
||
|
|
//{{AFX_MSG_MAP(CTaskPageButtons)
|
||
|
|
ON_BN_CLICKED(IDC_CHK_USELINKS, OnUpdateData)
|
||
|
|
ON_BN_CLICKED(IDC_CHK_OK, OnChkOk)
|
||
|
|
ON_BN_CLICKED(IDC_CHK_YES, OnChkYes)
|
||
|
|
ON_BN_CLICKED(IDC_CHK_CANCEL, OnChkCancel)
|
||
|
|
ON_BN_CLICKED(IDC_CHK_NO, OnChkNo)
|
||
|
|
ON_BN_CLICKED(IDC_CHK_RETRY, OnChkRetry)
|
||
|
|
ON_BN_CLICKED(IDC_CHK_CLOSE, OnChkClose)
|
||
|
|
ON_BN_CLICKED(IDC_BTN_ADD, OnBtnAdd)
|
||
|
|
ON_BN_CLICKED(IDC_BTN_EDIT, OnBtnEdit)
|
||
|
|
ON_BN_CLICKED(IDC_BTN_REMOVE, OnBtnRemove)
|
||
|
|
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_CUSTOM, OnItemChangedListCustom)
|
||
|
|
ON_BN_CLICKED(IDC_CHK_SHOWICONS, OnUpdateData)
|
||
|
|
ON_CBN_SELENDOK(IDC_COMBO_DEFAULT, OnUpdateData)
|
||
|
|
ON_WM_DESTROY()
|
||
|
|
//}}AFX_MSG_MAP
|
||
|
|
END_MESSAGE_MAP()
|
||
|
|
|
||
|
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
// CTaskPageButtons message handlers
|
||
|
|
|
||
|
|
void CTaskPageButtons::AddCommonButton(int nID)
|
||
|
|
{
|
||
|
|
switch (nID)
|
||
|
|
{
|
||
|
|
case IDOK:
|
||
|
|
m_pDlgParent->UpdateButtonMap(
|
||
|
|
m_strOk, IDOK, &m_comboDefault, m_bOk);
|
||
|
|
break;
|
||
|
|
case IDYES:
|
||
|
|
m_pDlgParent->UpdateButtonMap(
|
||
|
|
m_strYes, IDYES, &m_comboDefault, m_bYes);
|
||
|
|
break;
|
||
|
|
case IDCANCEL:
|
||
|
|
m_pDlgParent->UpdateButtonMap(
|
||
|
|
m_strCancel, IDCANCEL, &m_comboDefault, m_bCancel);
|
||
|
|
break;
|
||
|
|
case IDNO:
|
||
|
|
m_pDlgParent->UpdateButtonMap(
|
||
|
|
m_strNo, IDNO, &m_comboDefault, m_bNo);
|
||
|
|
break;
|
||
|
|
case IDRETRY:
|
||
|
|
m_pDlgParent->UpdateButtonMap(
|
||
|
|
m_strRetry, IDRETRY, &m_comboDefault, m_bRetry);
|
||
|
|
break;
|
||
|
|
case IDCLOSE:
|
||
|
|
m_pDlgParent->UpdateButtonMap(
|
||
|
|
m_strClose, IDCLOSE, &m_comboDefault, m_bClose);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void CTaskPageButtons::OnChkOk()
|
||
|
|
{
|
||
|
|
UpdateData();
|
||
|
|
AddCommonButton(IDOK);
|
||
|
|
}
|
||
|
|
|
||
|
|
void CTaskPageButtons::OnChkYes()
|
||
|
|
{
|
||
|
|
UpdateData();
|
||
|
|
AddCommonButton(IDYES);
|
||
|
|
}
|
||
|
|
|
||
|
|
void CTaskPageButtons::OnChkCancel()
|
||
|
|
{
|
||
|
|
UpdateData();
|
||
|
|
AddCommonButton(IDCANCEL);
|
||
|
|
}
|
||
|
|
|
||
|
|
void CTaskPageButtons::OnChkNo()
|
||
|
|
{
|
||
|
|
UpdateData();
|
||
|
|
AddCommonButton(IDNO);
|
||
|
|
}
|
||
|
|
|
||
|
|
void CTaskPageButtons::OnChkRetry()
|
||
|
|
{
|
||
|
|
UpdateData();
|
||
|
|
AddCommonButton(IDRETRY);
|
||
|
|
}
|
||
|
|
|
||
|
|
void CTaskPageButtons::OnChkClose()
|
||
|
|
{
|
||
|
|
UpdateData();
|
||
|
|
AddCommonButton(IDCLOSE);
|
||
|
|
}
|
||
|
|
|
||
|
|
void CTaskPageButtons::OnUpdateData()
|
||
|
|
{
|
||
|
|
UpdateData();
|
||
|
|
|
||
|
|
GetDlgItem(IDC_CHK_SHOWICONS)->EnableWindow(m_bUseLinks);
|
||
|
|
}
|
||
|
|
|
||
|
|
void CTaskPageButtons::OnBtnAdd()
|
||
|
|
{
|
||
|
|
// TODO: Add your control notification handler code here
|
||
|
|
CTaskEditButtonDlg dlg(&m_comboDefault, FALSE, m_pDlgParent);
|
||
|
|
if (dlg.DoModal() == IDOK)
|
||
|
|
{
|
||
|
|
CString strID;
|
||
|
|
strID.Format(_T("%d"), dlg.m_nID);
|
||
|
|
int nIndex = m_listCustom.GetItemCount();
|
||
|
|
m_listCustom.InsertItem(nIndex, dlg.m_strText);
|
||
|
|
m_listCustom.SetItemText(nIndex, 1, strID);
|
||
|
|
}
|
||
|
|
m_listCustom.SetFocus();
|
||
|
|
}
|
||
|
|
|
||
|
|
void CTaskPageButtons::OnBtnEdit()
|
||
|
|
{
|
||
|
|
// TODO: Add your control notification handler code here
|
||
|
|
POSITION pos = m_listCustom.GetFirstSelectedItemPosition();
|
||
|
|
if (pos)
|
||
|
|
{
|
||
|
|
CTaskEditButtonDlg dlg(&m_comboDefault, TRUE, m_pDlgParent);
|
||
|
|
|
||
|
|
int nIndex = m_listCustom.GetNextSelectedItem(pos);
|
||
|
|
|
||
|
|
dlg.m_strText = m_listCustom.GetItemText(nIndex, 0);
|
||
|
|
dlg.m_nID = _ttoi(m_listCustom.GetItemText(nIndex, 1));
|
||
|
|
|
||
|
|
if (dlg.DoModal() == IDOK)
|
||
|
|
{
|
||
|
|
CString strID;
|
||
|
|
strID.Format(_T("%d"), dlg.m_nID);
|
||
|
|
m_listCustom.SetItemText(nIndex, 0, dlg.m_strText);
|
||
|
|
m_listCustom.SetItemText(nIndex, 1, strID);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
m_listCustom.SetFocus();
|
||
|
|
}
|
||
|
|
|
||
|
|
void CTaskPageButtons::OnBtnRemove()
|
||
|
|
{
|
||
|
|
// TODO: Add your control notification handler code here
|
||
|
|
POSITION pos = m_listCustom.GetFirstSelectedItemPosition();
|
||
|
|
if (pos)
|
||
|
|
{
|
||
|
|
if (::MessageBox(m_hWnd, _T("Are you sure you want to delete this item?"),
|
||
|
|
_T("Confirm Delete"), MB_YESNO|MB_ICONQUESTION) == IDYES)
|
||
|
|
{
|
||
|
|
int nIndex = m_listCustom.GetNextSelectedItem(pos);
|
||
|
|
if (nIndex != LB_ERR)
|
||
|
|
{
|
||
|
|
int nID = _ttoi(m_listCustom.GetItemText(nIndex, 1));
|
||
|
|
CString strText = m_listCustom.GetItemText(nIndex, 0);
|
||
|
|
|
||
|
|
m_pDlgParent->UpdateButtonMap(
|
||
|
|
strText, nID, &m_comboDefault, FALSE);
|
||
|
|
|
||
|
|
m_listCustom.DeleteItem(nIndex);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
m_listCustom.SetFocus();
|
||
|
|
}
|
||
|
|
|
||
|
|
void CTaskPageButtons::OnItemChangedListCustom(NMHDR* /*pNMHDR*/, LRESULT* pResult)
|
||
|
|
{
|
||
|
|
EnableButtons();
|
||
|
|
|
||
|
|
*pResult = 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
void CTaskPageButtons::InsertItem(CString strText, UINT nID)
|
||
|
|
{
|
||
|
|
CString strID;
|
||
|
|
strID.Format(_T("%d"), nID);
|
||
|
|
|
||
|
|
int nIndex = m_listCustom.GetItemCount();
|
||
|
|
m_listCustom.InsertItem(nIndex, strText);
|
||
|
|
m_listCustom.SetItemText(nIndex, 1, strID);
|
||
|
|
|
||
|
|
m_pDlgParent->UpdateButtonMap(
|
||
|
|
strText, nID, &m_comboDefault, TRUE);
|
||
|
|
}
|
||
|
|
|
||
|
|
void CTaskPageButtons::InsertItem(UINT nString, UINT nID)
|
||
|
|
{
|
||
|
|
CString strText;
|
||
|
|
strText.LoadString(nString);
|
||
|
|
InsertItem(strText, nID);
|
||
|
|
}
|
||
|
|
|
||
|
|
BOOL CTaskPageButtons::OnInitDialog()
|
||
|
|
{
|
||
|
|
CPropertyPage::OnInitDialog();
|
||
|
|
|
||
|
|
// TODO: Add extra initialization here
|
||
|
|
m_pDlgParent = DYNAMIC_DOWNCAST(CTaskSheetProperties, GetParent());
|
||
|
|
ASSERT_VALID(m_pDlgParent);
|
||
|
|
|
||
|
|
m_listCustom.InsertColumn(0, _T("Text"), LVCFMT_LEFT, 160);
|
||
|
|
m_listCustom.InsertColumn(1, _T("Value"), LVCFMT_LEFT, 60);
|
||
|
|
|
||
|
|
ListView_SetExtendedListViewStyle(
|
||
|
|
m_listCustom.m_hWnd, LVS_EX_FULLROWSELECT);
|
||
|
|
|
||
|
|
LoadState();
|
||
|
|
|
||
|
|
GetDlgItem(IDC_CHK_SHOWICONS)->EnableWindow(m_bUseLinks);
|
||
|
|
|
||
|
|
|
||
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
||
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
||
|
|
}
|
||
|
|
|
||
|
|
BOOL CTaskPageButtons::OnSetActive()
|
||
|
|
{
|
||
|
|
if (!CPropertyPage::OnSetActive())
|
||
|
|
return FALSE;
|
||
|
|
|
||
|
|
EnableButtons();
|
||
|
|
|
||
|
|
return TRUE;
|
||
|
|
}
|
||
|
|
|
||
|
|
void CTaskPageButtons::EnableButtons()
|
||
|
|
{
|
||
|
|
if (::IsWindow(m_listCustom.m_hWnd))
|
||
|
|
{
|
||
|
|
BOOL bEnable = (m_listCustom.GetSelectedCount() > 0);
|
||
|
|
m_btnEdit.EnableWindow(bEnable);
|
||
|
|
m_btnRemove.EnableWindow(bEnable);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
#define REG_SETTINGS _T("Settings\\Buttons")
|
||
|
|
|
||
|
|
void CTaskPageButtons::LoadState()
|
||
|
|
{
|
||
|
|
m_bOk = theApp.GetProfileInt(REG_SETTINGS, m_strOk, FALSE);
|
||
|
|
AddCommonButton(IDOK);
|
||
|
|
|
||
|
|
m_bYes = theApp.GetProfileInt(REG_SETTINGS, m_strYes, FALSE);
|
||
|
|
AddCommonButton(IDYES);
|
||
|
|
|
||
|
|
m_bNo = theApp.GetProfileInt(REG_SETTINGS, m_strNo, FALSE);
|
||
|
|
AddCommonButton(IDNO);
|
||
|
|
|
||
|
|
m_bCancel = theApp.GetProfileInt(REG_SETTINGS, m_strCancel, FALSE);
|
||
|
|
AddCommonButton(IDCANCEL);
|
||
|
|
|
||
|
|
m_bRetry = theApp.GetProfileInt(REG_SETTINGS, m_strRetry, FALSE);
|
||
|
|
AddCommonButton(IDRETRY);
|
||
|
|
|
||
|
|
m_bClose = theApp.GetProfileInt(REG_SETTINGS, m_strClose, FALSE);
|
||
|
|
AddCommonButton(IDCLOSE);
|
||
|
|
|
||
|
|
m_bUseLinks = theApp.GetProfileInt(REG_SETTINGS, _T("UseLinks"), FALSE);
|
||
|
|
m_bShowIcons = theApp.GetProfileInt(REG_SETTINGS, _T("ShowIcons"), TRUE);
|
||
|
|
|
||
|
|
if (::IsWindow(m_listCustom.m_hWnd))
|
||
|
|
{
|
||
|
|
int nCount = theApp.GetProfileInt(REG_SETTINGS, _T("Count"), 0);
|
||
|
|
for (int i = 0; i < nCount; ++i)
|
||
|
|
{
|
||
|
|
CString strSection;
|
||
|
|
strSection.Format(_T("UserItem_%d"), i);
|
||
|
|
|
||
|
|
CString strBuffer = theApp.GetProfileString(REG_SETTINGS, strSection);
|
||
|
|
|
||
|
|
CString strText;
|
||
|
|
AfxExtractSubString(strText, strBuffer, 0, '~');
|
||
|
|
|
||
|
|
CString strValue;
|
||
|
|
AfxExtractSubString(strValue, strBuffer, 1, '~');
|
||
|
|
|
||
|
|
InsertItem(strText, _ttoi(strValue));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
UpdateData(FALSE);
|
||
|
|
}
|
||
|
|
|
||
|
|
void CTaskPageButtons::SaveState()
|
||
|
|
{
|
||
|
|
UpdateData();
|
||
|
|
|
||
|
|
theApp.WriteProfileInt(REG_SETTINGS, m_strOk, m_bOk);
|
||
|
|
theApp.WriteProfileInt(REG_SETTINGS, m_strYes, m_bYes);
|
||
|
|
theApp.WriteProfileInt(REG_SETTINGS, m_strNo, m_bNo);
|
||
|
|
theApp.WriteProfileInt(REG_SETTINGS, m_strCancel, m_bCancel);
|
||
|
|
theApp.WriteProfileInt(REG_SETTINGS, m_strRetry, m_bRetry);
|
||
|
|
theApp.WriteProfileInt(REG_SETTINGS, m_strClose, m_bClose);
|
||
|
|
theApp.WriteProfileInt(REG_SETTINGS, _T("UseLinks"), m_bUseLinks);
|
||
|
|
theApp.WriteProfileInt(REG_SETTINGS, _T("ShowIcons"), m_bShowIcons);
|
||
|
|
|
||
|
|
if (::IsWindow(m_listCustom.m_hWnd))
|
||
|
|
{
|
||
|
|
int nCount = m_listCustom.GetItemCount();
|
||
|
|
theApp.WriteProfileInt(REG_SETTINGS, _T("Count"), nCount);
|
||
|
|
|
||
|
|
for (int i = 0; i < nCount; ++i)
|
||
|
|
{
|
||
|
|
CString strSection;
|
||
|
|
strSection.Format(_T("UserItem_%d"), i);
|
||
|
|
|
||
|
|
CString strText = m_listCustom.GetItemText(i,0);
|
||
|
|
CString strValue = m_listCustom.GetItemText(i,1);
|
||
|
|
|
||
|
|
CString strBuffer;
|
||
|
|
strBuffer.Format(_T("%s~%s"), strText, strValue);
|
||
|
|
theApp.WriteProfileString(REG_SETTINGS, strSection, strBuffer);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void CTaskPageButtons::OnDestroy()
|
||
|
|
{
|
||
|
|
SaveState();
|
||
|
|
CPropertyPage::OnDestroy();
|
||
|
|
}
|
||
|
|
|