preferencestaskdefpage.cpp

来自「管理项目进度工具的原代码」· C++ 代码 · 共 317 行

CPP
317
字号
// PreferencesTaskDefPage.cpp : implementation file
//

#include "stdafx.h"
#include "todolist.h"
#include "PreferencesTaskDefPage.h"
#include "tdcenum.h"

#include "..\shared\enstring.h"
#include "..\shared\misc.h"

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

/////////////////////////////////////////////////////////////////////////////
// CPreferencesTaskDefPage property page

IMPLEMENT_DYNCREATE(CPreferencesTaskDefPage, CPreferencesPageBase)

CPreferencesTaskDefPage::CPreferencesTaskDefPage() : 
	CPreferencesPageBase(CPreferencesTaskDefPage::IDD),
	m_cbAllocByList(TRUE),
	m_cbAllocToList(TRUE),
	m_cbCategoryList(TRUE),
	m_cbStatusList(TRUE)
{
	//{{AFX_DATA_INIT(CPreferencesTaskDefPage)
	//}}AFX_DATA_INIT
	m_nSelAttribUse = -1;

	// attrib use
	m_aAttribPrefs.Add(ATTRIBPREF(IDS_TDLBC_PRIORITY, PTPA_PRIORITY, -1)); 
	m_aAttribPrefs.Add(ATTRIBPREF(IDS_TDLBC_RISK, PTPA_RISK, -1)); 
	m_aAttribPrefs.Add(ATTRIBPREF(IDS_TDLBC_TIMEEST, PTPA_TIMEEST, -1)); 
	m_aAttribPrefs.Add(ATTRIBPREF(IDS_TDLBC_ALLOCTO, PTPA_ALLOCTO, -1)); 
	m_aAttribPrefs.Add(ATTRIBPREF(IDS_TDLBC_ALLOCBY, PTPA_ALLOCBY, -1)); 
	m_aAttribPrefs.Add(ATTRIBPREF(IDS_TDLBC_STATUS, PTPA_STATUS, -1)); 
	m_aAttribPrefs.Add(ATTRIBPREF(IDS_TDLBC_CATEGORY, PTPA_CATEGORY, -1)); 
	m_aAttribPrefs.Add(ATTRIBPREF(IDS_PTDP_COLOR, PTPA_COLOR, -1)); 
	m_aAttribPrefs.Add(ATTRIBPREF(IDS_PTDP_DUEDATE, PTPA_DUEDATE, -1)); 

	m_eCost.SetMask(".0123456789", ME_LOCALIZEDECIMAL);
}

CPreferencesTaskDefPage::~CPreferencesTaskDefPage()
{
}

void CPreferencesTaskDefPage::DoDataExchange(CDataExchange* pDX)
{
	CPreferencesPageBase::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPreferencesTaskDefPage)
	DDX_Control(pDX, IDC_DEFAULTRISK, m_cbDefRisk);
	DDX_Control(pDX, IDC_DEFAULTPRIORITY, m_cbDefPriority);
	DDX_Control(pDX, IDC_ALLOCBYLIST, m_cbAllocByList);
	DDX_Control(pDX, IDC_ALLOCTOLIST, m_cbAllocToList);
	DDX_Control(pDX, IDC_STATUSLIST, m_cbStatusList);
	DDX_Control(pDX, IDC_CATEGORYLIST, m_cbCategoryList);
	DDX_Control(pDX, IDC_DEFAULTTIMEEST, m_eTimeEst);
	DDX_Text(pDX, IDC_DEFAULTCREATEDBY, m_sDefCreatedBy);
	DDX_Text(pDX, IDC_DEFAULTCOST, m_dDefCost);
	//}}AFX_DATA_MAP
	DDX_Control(pDX, IDC_DEFAULTCOST, m_eCost);
	DDX_Control(pDX, IDC_SETDEFAULTCOLOR, m_btDefColor);
	DDX_Control(pDX, IDC_INHERITATTRIBUTES, m_lbAttribUse);
	DDX_CBPriority(pDX, IDC_DEFAULTPRIORITY, m_nDefPriority);
	DDX_CBRisk(pDX, IDC_DEFAULTRISK, m_nDefRisk);
	DDX_Text(pDX, IDC_DEFAULTTIMEEST, m_dDefTimeEst);
	DDX_Text(pDX, IDC_DEFAULTALLOCTO, m_sDefAllocTo);
	DDX_LBIndex(pDX, IDC_INHERITATTRIBUTES, m_nSelAttribUse);
	DDX_Text(pDX, IDC_DEFAULTALLOCBY, m_sDefAllocBy);
	DDX_Text(pDX, IDC_DEFAULTSTATUS, m_sDefStatus);
	DDX_Text(pDX, IDC_DEFAULTCATEGORY, m_sDefCategory);
	DDX_Check(pDX, IDC_USEPARENTATTRIB, m_bUseParentAttributes);
	DDX_Check(pDX, IDC_USECREATIONFORDEFSTARTDATE, m_bUseCreationForDefStartDate);
}


BEGIN_MESSAGE_MAP(CPreferencesTaskDefPage, CPreferencesPageBase)
	//{{AFX_MSG_MAP(CPreferencesTaskDefPage)
	ON_WM_CTLCOLOR()
	//}}AFX_MSG_MAP
	ON_BN_CLICKED(IDC_SETDEFAULTCOLOR, OnSetdefaultcolor)
	ON_BN_CLICKED(IDC_USEPARENTATTRIB, OnUseparentattrib)
	ON_CLBN_CHKCHANGE(IDC_INHERITATTRIBUTES, OnAttribUseChange)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPreferencesTaskDefPage message handlers

BOOL CPreferencesTaskDefPage::OnInitDialog() 
{
	CPreferencesPageBase::OnInitDialog();
	
	m_mgrGroupLines.AddGroupLine(IDC_DEFGROUP, *this);
	m_mgrGroupLines.AddGroupLine(IDC_INHERITGROUP, *this);

	GetDlgItem(IDC_INHERITATTRIBUTES)->EnableWindow(m_bUseParentAttributes);
	
	m_btDefColor.SetColor(m_crDef);

	int nIndex = (int)m_aAttribPrefs.GetSize();
	
	while (nIndex--)
	{
		int nPos = m_lbAttribUse.InsertString(0, m_aAttribPrefs[nIndex].sName);
		m_lbAttribUse.SetCheck(nPos, m_aAttribPrefs[nIndex].bUse ? 1 : 0);
	}

	// init edit prompts()
	m_mgrPrompts.SetEditPrompt(IDC_DEFAULTALLOCTO, *this, CEnString(IDS_PTDP_NAMEPROMPT));
	m_mgrPrompts.SetEditPrompt(IDC_DEFAULTALLOCBY, *this, CEnString(IDS_PTDP_NAMEPROMPT));
	m_mgrPrompts.SetEditPrompt(IDC_DEFAULTSTATUS, *this, CEnString(IDS_PTDP_STATUSPROMPT));
	m_mgrPrompts.SetEditPrompt(IDC_DEFAULTCATEGORY, *this, CEnString(IDS_PTDP_CATEGORYPROMPT));
	m_mgrPrompts.SetEditPrompt(IDC_DEFAULTCREATEDBY, *this, CEnString(IDS_PTDP_NAMEPROMPT));
	m_mgrPrompts.SetComboEditPrompt(IDC_ALLOCTOLIST, *this, CEnString(IDS_PTDP_NAMEPROMPT));
	m_mgrPrompts.SetComboEditPrompt(IDC_ALLOCBYLIST, *this, CEnString(IDS_PTDP_NAMEPROMPT));
	m_mgrPrompts.SetComboEditPrompt(IDC_STATUSLIST, *this, CEnString(IDS_PTDP_STATUSPROMPT));
	m_mgrPrompts.SetComboEditPrompt(IDC_CATEGORYLIST, *this, CEnString(IDS_PTDP_CATEGORYPROMPT));

	// default string lists
	m_cbCategoryList.AddUniqueItems(m_aDefCats);
	m_cbStatusList.AddUniqueItems(m_aDefStatus);
	m_cbAllocToList.AddUniqueItems(m_aDefAllocTo);
	m_cbAllocByList.AddUniqueItems(m_aDefAllocBy);
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CPreferencesTaskDefPage::SetPriorityColors(const CDWordArray& aColors)
{
	m_cbDefPriority.SetColors(aColors);
}

void CPreferencesTaskDefPage::OnOK() 
{
	CPreferencesPageBase::OnOK();

	// default string lists
	m_cbCategoryList.GetItems(m_aDefCats);
	m_cbStatusList.GetItems(m_aDefStatus);
	m_cbAllocToList.GetItems(m_aDefAllocTo);
	m_cbAllocByList.GetItems(m_aDefAllocBy);
}

void CPreferencesTaskDefPage::OnSetdefaultcolor() 
{
	m_crDef = m_btDefColor.GetColor();
}

void CPreferencesTaskDefPage::OnUseparentattrib() 
{
	UpdateData();

	GetDlgItem(IDC_INHERITATTRIBUTES)->EnableWindow(m_bUseParentAttributes);
}

void CPreferencesTaskDefPage::OnAttribUseChange()
{
	UpdateData();

	ASSERT (m_nSelAttribUse >= 0);
	
	if (m_nSelAttribUse >= 0)
		m_aAttribPrefs[m_nSelAttribUse].bUse = m_lbAttribUse.GetCheck(m_nSelAttribUse);
}

BOOL CPreferencesTaskDefPage::GetUseParentAttrib(PTP_ATTRIB nAttrib) const
{ 
	if (!m_bUseParentAttributes)
		return FALSE;
	
	int nIndex = (int)m_aAttribPrefs.GetSize();
	
	while (nIndex--)
	{
		if (m_aAttribPrefs[nIndex].nAttrib == nAttrib)
			return m_aAttribPrefs[nIndex].bUse; 
	}

	// else
	return FALSE;
}

int CPreferencesTaskDefPage::GetDefaultCategories(CStringArray& aCats) const
{
	return Misc::ParseIntoArray(m_sDefCategory, aCats);
}

int CPreferencesTaskDefPage::GetDefaultAllocTo(CStringArray& aAllocTo) const
{
	return Misc::ParseIntoArray(m_sDefAllocTo, aAllocTo);
}

double CPreferencesTaskDefPage::GetDefaultTimeEst(int& nUnits) const 
{ 
	nUnits = m_eTimeEst.GetUnits();

	return m_dDefTimeEst; 
}

int CPreferencesTaskDefPage::GetCategoryList(CStringArray& aItems) const
{
	aItems.Copy(m_aDefCats);
	return aItems.GetSize();
}

int CPreferencesTaskDefPage::GetStatusList(CStringArray& aItems) const
{
	aItems.Copy(m_aDefStatus);
	return aItems.GetSize();
}

int CPreferencesTaskDefPage::GetAllocToList(CStringArray& aItems) const
{
	aItems.Copy(m_aDefAllocTo);
	return aItems.GetSize();
}

int CPreferencesTaskDefPage::GetAllocByList(CStringArray& aItems) const
{
	aItems.Copy(m_aDefAllocBy);
	return aItems.GetSize();
}

HBRUSH CPreferencesTaskDefPage::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	HBRUSH hbr = CPreferencesPageBase::OnCtlColor(pDC, pWnd, nCtlColor);
	
	if (pWnd->GetDlgCtrlID() == IDC_DEFLISTLABEL)
		pDC->SetTextColor(GetSysColor(COLOR_3DDKSHADOW));
	
	return hbr;
}

void CPreferencesTaskDefPage::LoadPreferences(const CPreferencesStorage& prefs)
{
	// load settings
	m_nDefPriority = prefs.GetProfileInt("Preferences", "DefaultPriority", 5); 
	m_nDefRisk = prefs.GetProfileInt("Preferences", "DefaultRisk", 0); 
	m_sDefAllocTo = prefs.GetProfileString("Preferences", "DefaultAllocTo");
	m_sDefAllocBy = prefs.GetProfileString("Preferences", "DefaultAllocBy");
	m_sDefStatus = prefs.GetProfileString("Preferences", "DefaultStatus");
	m_sDefCategory = prefs.GetProfileString("Preferences", "DefaultCategory");
	m_sDefCreatedBy = prefs.GetProfileString("Preferences", "DefaultCreatedBy");
	m_crDef = prefs.GetProfileInt("Preferences", "DefaultColor", 0);
	m_bUseParentAttributes = prefs.GetProfileInt("Preferences", "UseParentAttributes", TRUE);
	m_bUseCreationForDefStartDate = prefs.GetProfileInt("Preferences", "UseCreationForDefStartDate", TRUE);

	// backwards compatibility
	int nTimeEst = prefs.GetProfileInt("Preferences", "DefaultTimeEstimate", -1);

	if (nTimeEst != -1) // key exists
		m_dDefTimeEst = (double)nTimeEst;
	else
		m_dDefTimeEst = prefs.GetProfileDouble("Preferences", "DefaultTimeEstimate", 0);

   m_eTimeEst.SetUnits(prefs.GetProfileInt("Preferences", "DefaultTimeEstUnits", THU_HOURS));

   m_dDefCost = Misc::Atof(prefs.GetProfileString("Preferences", "DefaultCost", "0"));

   // attribute use
	int nIndex = m_aAttribPrefs.GetSize();
	
	while (nIndex--)
	{
		CString sKey;
		sKey.Format("Attrib%d", m_aAttribPrefs[nIndex].nAttrib);
		
		m_aAttribPrefs[nIndex].bUse = prefs.GetProfileInt("Preferences\\AttribUse", sKey, FALSE);
	}

	// combo lists
	prefs.GetArrayItems("Preferences\\CategoryList", m_aDefCats);
	prefs.GetArrayItems("Preferences\\StatusList", m_aDefStatus);
	prefs.GetArrayItems("Preferences\\AllocToList", m_aDefAllocTo);
	prefs.GetArrayItems("Preferences\\AllocByList", m_aDefAllocBy);
}

void CPreferencesTaskDefPage::SavePreferences(CPreferencesStorage& prefs)
{
	// save settings
	prefs.WriteProfileInt("Preferences", "DefaultPriority", m_nDefPriority);
	prefs.WriteProfileInt("Preferences", "DefaultRisk", m_nDefRisk);
	prefs.WriteProfileString("Preferences", "DefaultAllocTo", m_sDefAllocTo);
	prefs.WriteProfileString("Preferences", "DefaultAllocBy", m_sDefAllocBy);
	prefs.WriteProfileString("Preferences", "DefaultStatus", m_sDefStatus);
	prefs.WriteProfileString("Preferences", "DefaultCategory", m_sDefCategory);
	prefs.WriteProfileString("Preferences", "DefaultCreatedBy", m_sDefCreatedBy);
	prefs.WriteProfileInt("Preferences", "DefaultColor", m_crDef);
	prefs.WriteProfileInt("Preferences", "UseParentAttributes", m_bUseParentAttributes);
	prefs.WriteProfileInt("Preferences", "UseCreationForDefStartDate", m_bUseCreationForDefStartDate);
	prefs.WriteProfileDouble("Preferences", "DefaultCost", m_dDefCost);
	prefs.WriteProfileDouble("Preferences", "DefaultTimeEstimate", m_dDefTimeEst);
	prefs.WriteProfileInt("Preferences", "DefaultTimeEstUnits", m_eTimeEst.GetUnits());
	
	// attribute usage
	int nIndex = m_aAttribPrefs.GetSize();

	while (nIndex--)
	{
		CString sKey;
		sKey.Format("Attrib%d", m_aAttribPrefs[nIndex].nAttrib);

		prefs.WriteProfileInt("Preferences\\AttribUse", sKey, m_aAttribPrefs[nIndex].bUse);
	}

	prefs.WriteArrayItems(m_aDefCats, "Preferences\\CategoryList");
	prefs.WriteArrayItems(m_aDefStatus, "Preferences\\StatusList");
	prefs.WriteArrayItems(m_aDefAllocTo, "Preferences\\AllocToList");
	prefs.WriteArrayItems(m_aDefAllocBy, "Preferences\\AllocByList");
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?