OSDN Git Service

Fix issue #2046: Folder compare omits unique folders from results if they contain...
[winmerge-jp/winmerge-jp.git] / Src / PropDirColors.cpp
1 /** 
2  * @file  PropDirColors.cpp
3  *
4  * @brief Implementation of PropDirColors propertysheet
5  */
6
7 #include "stdafx.h"
8 #include "PropDirColors.h"
9 #include "OptionsCustomColors.h"
10 #include "OptionsDef.h"
11 #include "OptionsMgr.h"
12 #include "OptionsPanel.h"
13
14 #ifdef _DEBUG
15 #define new DEBUG_NEW
16 #endif
17
18 /** 
19  * @brief Default constructor.
20  */
21 PropDirColors::PropDirColors(COptionsMgr *optionsMgr)
22  : OptionsPanel(optionsMgr, PropDirColors::IDD)
23  , m_bUseColors(false)
24  , m_cCustColors()
25 {
26 }
27
28 void PropDirColors::DoDataExchange(CDataExchange* pDX)
29 {
30         CDialog::DoDataExchange(pDX);
31         //{{AFX_DATA_MAP(PropDirColors)
32         DDX_Check(pDX, IDC_USE_DIR_COMPARE_COLORS, m_bUseColors);
33         DDX_Control(pDX, IDC_DIR_ITEM_EQUAL_COLOR, m_cDirItemEqual);
34         DDX_Control(pDX, IDC_DIR_ITEM_EQUAL_TEXT_COLOR, m_cDirItemEqualText);
35         DDX_Control(pDX, IDC_DIR_ITEM_DIFF_COLOR, m_cDirItemDiff);
36         DDX_Control(pDX, IDC_DIR_ITEM_DIFF_TEXT_COLOR, m_cDirItemDiffText);
37         DDX_Control(pDX, IDC_DIR_ITEM_NOTEXISTALL_COLOR, m_cDirItemNotExistAll);
38         DDX_Control(pDX, IDC_DIR_ITEM_NOTEXISTALL_TEXT_COLOR, m_cDirItemNotExistAllText);
39         DDX_Control(pDX, IDC_DIR_ITEM_FILTERED_COLOR, m_cDirItemFiltered);
40         DDX_Control(pDX, IDC_DIR_ITEM_FILTERED_TEXT_COLOR, m_cDirItemFilteredText);
41         DDX_Control(pDX, IDC_DIR_MARGIN_COLOR, m_cDirMargin);
42         //}}AFX_DATA_MAP
43 }
44
45
46 BEGIN_MESSAGE_MAP(PropDirColors, OptionsPanel)
47         //{{AFX_MSG_MAP(PropDirColors)
48         ON_BN_CLICKED(IDC_DIR_ITEM_EQUAL_COLOR, OnDirItemEqualColor)
49         ON_BN_CLICKED(IDC_DIR_ITEM_EQUAL_TEXT_COLOR, OnDirItemEqualTextColor)
50         ON_BN_CLICKED(IDC_DIR_ITEM_DIFF_COLOR, OnDirItemDiffColor)
51         ON_BN_CLICKED(IDC_DIR_ITEM_DIFF_TEXT_COLOR, OnDirItemDiffTextColor)
52         ON_BN_CLICKED(IDC_DIR_ITEM_NOTEXISTALL_COLOR, OnDirItemNotExistAllColor)
53         ON_BN_CLICKED(IDC_DIR_ITEM_NOTEXISTALL_TEXT_COLOR, OnDirItemNotExistAllTextColor)
54         ON_BN_CLICKED(IDC_DIR_ITEM_FILTERED_COLOR, OnDirItemFilteredColor)
55         ON_BN_CLICKED(IDC_DIR_ITEM_FILTERED_TEXT_COLOR, OnDirItemFilteredTextColor)
56         ON_BN_CLICKED(IDC_DIR_MARGIN_COLOR, OnDirMargniColor)
57         //}}AFX_MSG_MAP
58 END_MESSAGE_MAP()
59
60 /** 
61  * @brief Reads options values from storage to UI.
62  * (Property sheet calls this before displaying all property pages)
63  */
64 void PropDirColors::ReadOptions()
65 {
66         m_bUseColors = GetOptionsMgr()->GetBool(OPT_DIRCLR_USE_COLORS) ? true : false;
67         SerializeColors(READ_OPTIONS);
68 }
69
70 /** 
71  * @brief Writes options values from UI to storage.
72  * (Property sheet calls this after displaying all property pages)
73  */
74 void PropDirColors::WriteOptions()
75 {
76         GetOptionsMgr()->SaveOption(OPT_DIRCLR_USE_COLORS, m_bUseColors);
77         SerializeColors(WRITE_OPTIONS);
78 }
79
80 /** 
81  * @brief Let user browse common color dialog, and select a color
82  */
83 void PropDirColors::BrowseColor(CColorButton & colorButton)
84 {
85         CColorDialog dialog(colorButton.GetColor());
86         Options::CustomColors::Load(GetOptionsMgr(), m_cCustColors.data());
87         dialog.m_cc.lpCustColors = m_cCustColors.data();
88         
89         if (dialog.DoModal() == IDOK)
90                 colorButton.SetColor(dialog.GetColor());
91         Options::CustomColors::Save(GetOptionsMgr(), m_cCustColors.data());
92 }
93
94 /** 
95  * @brief User wants to change equal color
96  */
97 void PropDirColors::OnDirItemEqualColor()
98 {
99         BrowseColor(m_cDirItemEqual);
100 }
101
102 /** 
103  * @brief User wants to change equal text color
104  */
105 void PropDirColors::OnDirItemEqualTextColor()
106 {
107         BrowseColor(m_cDirItemEqualText);
108 }
109
110 /** 
111  * @brief User wants to change diff color
112  */
113 void PropDirColors::OnDirItemDiffColor()
114 {
115         BrowseColor(m_cDirItemDiff);
116 }
117
118 /** 
119  * @brief User wants to change diff text color
120  */
121 void PropDirColors::OnDirItemDiffTextColor()
122 {
123         BrowseColor(m_cDirItemDiffText);
124 }
125
126 /** 
127  * @brief User wants to change not-exist-all color
128  */
129 void PropDirColors::OnDirItemNotExistAllColor()
130 {
131         BrowseColor(m_cDirItemNotExistAll);
132 }
133
134 /** 
135  * @brief User wants to change not-exist-all text color
136  */
137 void PropDirColors::OnDirItemNotExistAllTextColor()
138 {
139         BrowseColor(m_cDirItemNotExistAllText);
140 }
141
142 /** 
143  * @brief User wants to change filtered color
144  */
145 void PropDirColors::OnDirItemFilteredColor()
146 {
147         BrowseColor(m_cDirItemFiltered);
148 }
149
150 /**
151  * @brief User wants to change filtered text color
152  */
153 void PropDirColors::OnDirItemFilteredTextColor()
154 {
155         BrowseColor(m_cDirItemFilteredText);
156 }
157
158 /**
159  * @brief User wants to change background color
160  */
161 void PropDirColors::OnDirMargniColor()
162 {
163         BrowseColor(m_cDirMargin);
164 }
165
166 void PropDirColors::SerializeColors(OPERATION op)
167 {
168         SerializeColor(op, m_cDirItemEqual, OPT_DIRCLR_ITEM_EQUAL);
169         SerializeColor(op, m_cDirItemEqualText, OPT_DIRCLR_ITEM_EQUAL_TEXT);
170
171         SerializeColor(op, m_cDirItemDiff, OPT_DIRCLR_ITEM_DIFF);
172         SerializeColor(op, m_cDirItemDiffText, OPT_DIRCLR_ITEM_DIFF_TEXT);
173
174         SerializeColor(op, m_cDirItemNotExistAll, OPT_DIRCLR_ITEM_NOT_EXIST_ALL);
175         SerializeColor(op, m_cDirItemNotExistAllText, OPT_DIRCLR_ITEM_NOT_EXIST_ALL_TEXT);
176
177         SerializeColor(op, m_cDirItemFiltered, OPT_DIRCLR_ITEM_FILTERED);
178         SerializeColor(op, m_cDirItemFilteredText, OPT_DIRCLR_ITEM_FILTERED_TEXT);
179
180         SerializeColor(op, m_cDirMargin, OPT_DIRCLR_MARGIN);
181 }
182
183 void PropDirColors::SerializeColor(OPERATION op, CColorButton & btn, const String& optionName)
184 {
185         switch (op)
186         {
187         case WRITE_OPTIONS:
188                 GetOptionsMgr()->SaveOption(optionName, (unsigned)btn.GetColor());
189                 return;
190
191         case READ_OPTIONS:
192                 // Set colors for buttons, do NOT invalidate
193                 btn.SetColor(GetOptionsMgr()->GetInt(optionName), false);
194                 return;
195         }
196 }