2 * @file PropSyntaxColors.cpp
4 * @brief Implementation of PropSyntaxColors propertysheet
8 #include "PropSyntaxColors.h"
9 #include "SyntaxColors.h"
10 #include "OptionsSyntaxColors.h"
11 #include "OptionsCustomColors.h"
12 #include "OptionsPanel.h"
18 static const unsigned ColorIndices[] = {
19 COLORINDEX_KEYWORD, COLORINDEX_FUNCNAME, COLORINDEX_COMMENT,
20 COLORINDEX_NUMBER, COLORINDEX_OPERATOR, COLORINDEX_STRING,
21 COLORINDEX_PREPROCESSOR, COLORINDEX_USER1, COLORINDEX_USER2
24 IMPLEMENT_DYNAMIC(PropSyntaxColors, CPropertyPage)
26 PropSyntaxColors::PropSyntaxColors(COptionsMgr *optionsMgr, SyntaxColors *pColors)
27 : OptionsPanel(optionsMgr, PropSyntaxColors::IDD)
29 m_pTempColors = pColors;
31 // Set colors for buttons, do NOT invalidate
32 for (auto&& colorIndex : ColorIndices)
34 m_colorButtons[colorIndex].SetColor(m_pTempColors->GetColor(colorIndex), FALSE);
35 m_nBolds[colorIndex] = GetCheckVal(colorIndex);
38 memset(m_cCustColors, 0, sizeof(m_cCustColors));
41 void PropSyntaxColors::DoDataExchange(CDataExchange* pDX)
43 CPropertyPage::DoDataExchange(pDX);
44 DDX_Control(pDX, IDC_SCOLOR_KEYWORDS, m_colorButtons[COLORINDEX_KEYWORD]);
45 DDX_Control(pDX, IDC_SCOLOR_FUNCTIONS, m_colorButtons[COLORINDEX_FUNCNAME]);
46 DDX_Control(pDX, IDC_SCOLOR_COMMENTS, m_colorButtons[COLORINDEX_COMMENT]);
47 DDX_Control(pDX, IDC_SCOLOR_NUMBERS, m_colorButtons[COLORINDEX_NUMBER]);
48 DDX_Control(pDX, IDC_SCOLOR_OPERATORS, m_colorButtons[COLORINDEX_OPERATOR]);
49 DDX_Control(pDX, IDC_SCOLOR_STRINGS, m_colorButtons[COLORINDEX_STRING]);
50 DDX_Control(pDX, IDC_SCOLOR_PREPROCESSOR, m_colorButtons[COLORINDEX_PREPROCESSOR]);
51 DDX_Control(pDX, IDC_SCOLOR_USER1, m_colorButtons[COLORINDEX_USER1]);
52 DDX_Control(pDX, IDC_SCOLOR_USER2, m_colorButtons[COLORINDEX_USER2]);
53 DDX_Check(pDX, IDC_SCOLOR_KEYWORDS_BOLD, m_nBolds[COLORINDEX_KEYWORD]);
54 DDX_Check(pDX, IDC_SCOLOR_FUNCTIONS_BOLD, m_nBolds[COLORINDEX_FUNCNAME]);
55 DDX_Check(pDX, IDC_SCOLOR_COMMENTS_BOLD, m_nBolds[COLORINDEX_COMMENT]);
56 DDX_Check(pDX, IDC_SCOLOR_NUMBERS_BOLD, m_nBolds[COLORINDEX_NUMBER]);
57 DDX_Check(pDX, IDC_SCOLOR_OPERATORS_BOLD, m_nBolds[COLORINDEX_OPERATOR]);
58 DDX_Check(pDX, IDC_SCOLOR_STRINGS_BOLD, m_nBolds[COLORINDEX_STRING]);
59 DDX_Check(pDX, IDC_SCOLOR_PREPROCESSOR_BOLD, m_nBolds[COLORINDEX_PREPROCESSOR]);
60 DDX_Check(pDX, IDC_SCOLOR_USER1_BOLD, m_nBolds[COLORINDEX_USER1]);
61 DDX_Check(pDX, IDC_SCOLOR_USER2_BOLD, m_nBolds[COLORINDEX_USER2]);
65 BEGIN_MESSAGE_MAP(PropSyntaxColors, CPropertyPage)
66 ON_BN_CLICKED(IDC_SCOLOR_KEYWORDS, OnBnClickedEcolor<COLORINDEX_KEYWORD>)
67 ON_BN_CLICKED(IDC_SCOLOR_FUNCTIONS, OnBnClickedEcolor<COLORINDEX_FUNCNAME>)
68 ON_BN_CLICKED(IDC_SCOLOR_COMMENTS, OnBnClickedEcolor<COLORINDEX_COMMENT>)
69 ON_BN_CLICKED(IDC_SCOLOR_NUMBERS, OnBnClickedEcolor<COLORINDEX_NUMBER>)
70 ON_BN_CLICKED(IDC_SCOLOR_OPERATORS, OnBnClickedEcolor<COLORINDEX_OPERATOR>)
71 ON_BN_CLICKED(IDC_SCOLOR_STRINGS, OnBnClickedEcolor<COLORINDEX_STRING>)
72 ON_BN_CLICKED(IDC_SCOLOR_PREPROCESSOR, OnBnClickedEcolor<COLORINDEX_PREPROCESSOR>)
73 ON_BN_CLICKED(IDC_SCOLOR_USER1, OnBnClickedEcolor<COLORINDEX_USER1>)
74 ON_BN_CLICKED(IDC_SCOLOR_USER2, OnBnClickedEcolor<COLORINDEX_USER2>)
75 ON_BN_CLICKED(IDC_SCOLORS_BDEFAULTS, OnBnClickedEcolorsBdefaults)
76 ON_BN_CLICKED(IDC_SCOLOR_KEYWORDS_BOLD, (OnBnClickedBoldButton<IDC_SCOLOR_KEYWORDS_BOLD, COLORINDEX_KEYWORD>))
77 ON_BN_CLICKED(IDC_SCOLOR_FUNCTIONS_BOLD, (OnBnClickedBoldButton<IDC_SCOLOR_FUNCTIONS_BOLD, COLORINDEX_FUNCNAME>))
78 ON_BN_CLICKED(IDC_SCOLOR_COMMENTS_BOLD, (OnBnClickedBoldButton<IDC_SCOLOR_COMMENTS_BOLD, COLORINDEX_COMMENT>))
79 ON_BN_CLICKED(IDC_SCOLOR_NUMBERS_BOLD, (OnBnClickedBoldButton<IDC_SCOLOR_NUMBERS_BOLD, COLORINDEX_NUMBER>))
80 ON_BN_CLICKED(IDC_SCOLOR_OPERATORS_BOLD, (OnBnClickedBoldButton<IDC_SCOLOR_OPERATORS_BOLD, COLORINDEX_OPERATOR>))
81 ON_BN_CLICKED(IDC_SCOLOR_STRINGS_BOLD, (OnBnClickedBoldButton<IDC_SCOLOR_STRINGS_BOLD, COLORINDEX_STRING>))
82 ON_BN_CLICKED(IDC_SCOLOR_PREPROCESSOR_BOLD, (OnBnClickedBoldButton<IDC_SCOLOR_PREPROCESSOR_BOLD, COLORINDEX_PREPROCESSOR>))
83 ON_BN_CLICKED(IDC_SCOLOR_USER1_BOLD, (OnBnClickedBoldButton<IDC_SCOLOR_USER1_BOLD, COLORINDEX_USER1>))
84 ON_BN_CLICKED(IDC_SCOLOR_USER2_BOLD, (OnBnClickedBoldButton<IDC_SCOLOR_USER2_BOLD, COLORINDEX_USER2>))
88 * @brief Reads options values from storage to UI.
89 * (Property sheet calls this before displaying all property pages)
91 void PropSyntaxColors::ReadOptions()
96 * @brief Writes options values from UI to storage.
97 * (Property sheet calls this after displaying all property pages)
99 void PropSyntaxColors::WriteOptions()
101 // User can only change colors via BrowseColorAndSave,
102 // which writes to m_pTempColors
103 // so user's latest choices are in m_pTempColors
104 // (we don't have to read them from screen)
105 Options::SyntaxColors::Save(GetOptionsMgr(), m_pTempColors);
109 * @brief Let user browse common color dialog, and select a color & save to registry
111 void PropSyntaxColors::BrowseColorAndSave(unsigned colorIndex)
113 COLORREF currentColor = m_pTempColors->GetColor(colorIndex);
114 CColorDialog dialog(currentColor);
115 Options::CustomColors::Load(GetOptionsMgr(), m_cCustColors);
116 dialog.m_cc.lpCustColors = m_cCustColors;
118 if (dialog.DoModal() == IDOK)
120 currentColor = dialog.GetColor();
121 m_colorButtons[colorIndex].SetColor(currentColor);
122 m_pTempColors->SetColor(colorIndex, currentColor);
124 Options::CustomColors::Save(GetOptionsMgr(), m_cCustColors);
127 template <unsigned colorIndex>
128 void PropSyntaxColors::OnBnClickedEcolor()
130 BrowseColorAndSave(colorIndex);
133 void PropSyntaxColors::OnBnClickedEcolorsBdefaults()
135 m_pTempColors->SetDefaults();
136 for (auto&& colorIndex : ColorIndices)
138 m_colorButtons[colorIndex].SetColor(m_pTempColors->GetColor(colorIndex));
139 m_nBolds[colorIndex] = GetCheckVal(colorIndex);
145 template <unsigned ctlId, unsigned colorIndex>
146 void PropSyntaxColors::OnBnClickedBoldButton()
148 m_pTempColors->SetBold(colorIndex, IsDlgButtonChecked(ctlId) == BST_CHECKED);
151 int PropSyntaxColors::GetCheckVal(UINT nColorIndex)
153 if (m_pTempColors->GetBold(nColorIndex))
156 return BST_UNCHECKED;