OSDN Git Service

Webpage Compare: Add support for generating report files (#1941)
[winmerge-jp/winmerge-jp.git] / Src / PropSyntaxColors.cpp
1 /** 
2  * @file  PropSyntaxColors.cpp
3  *
4  * @brief Implementation of PropSyntaxColors propertysheet
5  */
6
7 #include "stdafx.h"
8 #include "PropSyntaxColors.h"
9 #include "SyntaxColors.h"
10 #include "OptionsSyntaxColors.h"
11 #include "OptionsCustomColors.h"
12 #include "OptionsPanel.h"
13
14 #ifdef _DEBUG
15 #define new DEBUG_NEW
16 #endif
17
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
22 };
23
24 IMPLEMENT_DYNAMIC(PropSyntaxColors, CPropertyPage)
25
26 PropSyntaxColors::PropSyntaxColors(COptionsMgr *optionsMgr, SyntaxColors *pColors)
27 : OptionsPanel(optionsMgr, PropSyntaxColors::IDD)
28 , m_nBolds()
29 , m_pTempColors(pColors)
30 , m_cCustColors()
31 {
32 }
33
34 void PropSyntaxColors::DoDataExchange(CDataExchange* pDX)
35 {
36         CPropertyPage::DoDataExchange(pDX);
37         DDX_Control(pDX, IDC_SCOLOR_KEYWORDS, m_colorButtons[COLORINDEX_KEYWORD]);
38         DDX_Control(pDX, IDC_SCOLOR_FUNCTIONS, m_colorButtons[COLORINDEX_FUNCNAME]);
39         DDX_Control(pDX, IDC_SCOLOR_COMMENTS, m_colorButtons[COLORINDEX_COMMENT]);
40         DDX_Control(pDX, IDC_SCOLOR_NUMBERS, m_colorButtons[COLORINDEX_NUMBER]);
41         DDX_Control(pDX, IDC_SCOLOR_OPERATORS, m_colorButtons[COLORINDEX_OPERATOR]);
42         DDX_Control(pDX, IDC_SCOLOR_STRINGS, m_colorButtons[COLORINDEX_STRING]);
43         DDX_Control(pDX, IDC_SCOLOR_PREPROCESSOR, m_colorButtons[COLORINDEX_PREPROCESSOR]);
44         DDX_Control(pDX, IDC_SCOLOR_USER1, m_colorButtons[COLORINDEX_USER1]);
45         DDX_Control(pDX, IDC_SCOLOR_USER2, m_colorButtons[COLORINDEX_USER2]);
46         DDX_Check(pDX, IDC_SCOLOR_KEYWORDS_BOLD, m_nBolds[COLORINDEX_KEYWORD]);
47         DDX_Check(pDX, IDC_SCOLOR_FUNCTIONS_BOLD, m_nBolds[COLORINDEX_FUNCNAME]);
48         DDX_Check(pDX, IDC_SCOLOR_COMMENTS_BOLD, m_nBolds[COLORINDEX_COMMENT]);
49         DDX_Check(pDX, IDC_SCOLOR_NUMBERS_BOLD, m_nBolds[COLORINDEX_NUMBER]);
50         DDX_Check(pDX, IDC_SCOLOR_OPERATORS_BOLD, m_nBolds[COLORINDEX_OPERATOR]);
51         DDX_Check(pDX, IDC_SCOLOR_STRINGS_BOLD, m_nBolds[COLORINDEX_STRING]);
52         DDX_Check(pDX, IDC_SCOLOR_PREPROCESSOR_BOLD, m_nBolds[COLORINDEX_PREPROCESSOR]);
53         DDX_Check(pDX, IDC_SCOLOR_USER1_BOLD, m_nBolds[COLORINDEX_USER1]);
54         DDX_Check(pDX, IDC_SCOLOR_USER2_BOLD, m_nBolds[COLORINDEX_USER2]);
55 }
56
57
58 BEGIN_MESSAGE_MAP(PropSyntaxColors, OptionsPanel)
59         ON_BN_CLICKED(IDC_SCOLOR_KEYWORDS, OnBnClickedEcolor<COLORINDEX_KEYWORD>)
60         ON_BN_CLICKED(IDC_SCOLOR_FUNCTIONS, OnBnClickedEcolor<COLORINDEX_FUNCNAME>)
61         ON_BN_CLICKED(IDC_SCOLOR_COMMENTS, OnBnClickedEcolor<COLORINDEX_COMMENT>)
62         ON_BN_CLICKED(IDC_SCOLOR_NUMBERS, OnBnClickedEcolor<COLORINDEX_NUMBER>)
63         ON_BN_CLICKED(IDC_SCOLOR_OPERATORS, OnBnClickedEcolor<COLORINDEX_OPERATOR>)
64         ON_BN_CLICKED(IDC_SCOLOR_STRINGS, OnBnClickedEcolor<COLORINDEX_STRING>)
65         ON_BN_CLICKED(IDC_SCOLOR_PREPROCESSOR, OnBnClickedEcolor<COLORINDEX_PREPROCESSOR>)
66         ON_BN_CLICKED(IDC_SCOLOR_USER1, OnBnClickedEcolor<COLORINDEX_USER1>)
67         ON_BN_CLICKED(IDC_SCOLOR_USER2, OnBnClickedEcolor<COLORINDEX_USER2>)
68         ON_BN_CLICKED(IDC_SCOLOR_KEYWORDS_BOLD, (OnBnClickedBoldButton<IDC_SCOLOR_KEYWORDS_BOLD, COLORINDEX_KEYWORD>))
69         ON_BN_CLICKED(IDC_SCOLOR_FUNCTIONS_BOLD, (OnBnClickedBoldButton<IDC_SCOLOR_FUNCTIONS_BOLD, COLORINDEX_FUNCNAME>))
70         ON_BN_CLICKED(IDC_SCOLOR_COMMENTS_BOLD, (OnBnClickedBoldButton<IDC_SCOLOR_COMMENTS_BOLD, COLORINDEX_COMMENT>))
71         ON_BN_CLICKED(IDC_SCOLOR_NUMBERS_BOLD, (OnBnClickedBoldButton<IDC_SCOLOR_NUMBERS_BOLD, COLORINDEX_NUMBER>))
72         ON_BN_CLICKED(IDC_SCOLOR_OPERATORS_BOLD, (OnBnClickedBoldButton<IDC_SCOLOR_OPERATORS_BOLD, COLORINDEX_OPERATOR>))
73         ON_BN_CLICKED(IDC_SCOLOR_STRINGS_BOLD, (OnBnClickedBoldButton<IDC_SCOLOR_STRINGS_BOLD, COLORINDEX_STRING>))
74         ON_BN_CLICKED(IDC_SCOLOR_PREPROCESSOR_BOLD, (OnBnClickedBoldButton<IDC_SCOLOR_PREPROCESSOR_BOLD, COLORINDEX_PREPROCESSOR>))
75         ON_BN_CLICKED(IDC_SCOLOR_USER1_BOLD, (OnBnClickedBoldButton<IDC_SCOLOR_USER1_BOLD, COLORINDEX_USER1>))
76         ON_BN_CLICKED(IDC_SCOLOR_USER2_BOLD, (OnBnClickedBoldButton<IDC_SCOLOR_USER2_BOLD, COLORINDEX_USER2>))
77 END_MESSAGE_MAP()
78
79 /** 
80  * @brief Reads options values from storage to UI.
81  * (Property sheet calls this before displaying all property pages)
82  */
83 void PropSyntaxColors::ReadOptions()
84 {
85         // Set colors for buttons
86         for (auto&& colorIndex : ColorIndices)
87         {
88                 m_colorButtons[colorIndex].SetColor(m_pTempColors->GetColor(colorIndex));
89                 m_nBolds[colorIndex] = GetCheckVal(colorIndex);
90         }
91 }
92
93 /** 
94  * @brief Writes options values from UI to storage.
95  * (Property sheet calls this after displaying all property pages)
96  */
97 void PropSyntaxColors::WriteOptions()
98 {
99         // User can only change colors via BrowseColorAndSave,
100         // which writes to m_pTempColors
101         // so user's latest choices are in m_pTempColors
102         // (we don't have to read them from screen)
103         Options::SyntaxColors::Save(GetOptionsMgr(), m_pTempColors);
104 }
105
106 /** 
107  * @brief Let user browse common color dialog, and select a color & save to registry
108  */
109 void PropSyntaxColors::BrowseColorAndSave(unsigned colorIndex)
110 {
111         COLORREF currentColor = m_pTempColors->GetColor(colorIndex);
112         CColorDialog dialog(currentColor);
113         Options::CustomColors::Load(GetOptionsMgr(), m_cCustColors.data());
114         dialog.m_cc.lpCustColors = m_cCustColors.data();
115         
116         if (dialog.DoModal() == IDOK)
117         {
118                 currentColor = dialog.GetColor();
119                 m_colorButtons[colorIndex].SetColor(currentColor);
120                 m_pTempColors->SetColor(colorIndex, currentColor);
121         }
122         Options::CustomColors::Save(GetOptionsMgr(), m_cCustColors.data());
123 }
124
125 template <unsigned colorIndex>
126 void PropSyntaxColors::OnBnClickedEcolor()
127 {
128         BrowseColorAndSave(colorIndex);
129 }
130
131 void PropSyntaxColors::OnBnClickedBoldButton(unsigned ctlId, unsigned colorIndex)
132 {
133         m_pTempColors->SetBold(colorIndex, IsDlgButtonChecked(ctlId) == BST_CHECKED);
134 }
135
136 int PropSyntaxColors::GetCheckVal(UINT nColorIndex)
137 {
138         if (m_pTempColors->GetBold(nColorIndex))
139                 return BST_CHECKED;
140         else
141                 return BST_UNCHECKED;
142 }