OSDN Git Service

2a77e41ad5b981b5b964d44a3febb33394ee5a4a
[xkeymacs/xkeymacs.git] / xkeymacs / properties.cpp
1 // Properties.cpp : implementation file\r
2 //\r
3 \r
4 #include "stdafx.h"\r
5 #include "xkeymacs.h"\r
6 #include "Profile.h"\r
7 #include "Properties.h"\r
8 \r
9 #ifdef _DEBUG\r
10 #define new DEBUG_NEW\r
11 #undef THIS_FILE\r
12 static char THIS_FILE[] = __FILE__;\r
13 #endif\r
14 \r
15 /////////////////////////////////////////////////////////////////////////////\r
16 // CProperties dialog\r
17 \r
18 \r
19 CProperties::CProperties(CWnd* pParent /*=NULL*/)\r
20         : CDialog(CProperties::IDD, pParent)\r
21 {\r
22         m_nAppID = 0;\r
23         //{{AFX_DATA_INIT(CProperties)\r
24         m_nSettingStyle = -1;\r
25         m_nKillRingMax = 0;\r
26         //}}AFX_DATA_INIT\r
27 }\r
28 \r
29 \r
30 void CProperties::DoDataExchange(CDataExchange* pDX)\r
31 {\r
32         CDialog::DoDataExchange(pDX);\r
33         //{{AFX_DATA_MAP(CProperties)\r
34         DDX_Control(pDX, IDC_WINDOW_TEXT, m_cWindowText);\r
35         DDX_Control(pDX, IDC_KILL_RING_MAX, m_cKillRingMax);\r
36         DDX_Control(pDX, IDC_USE_DIALOG_SETTING, m_cUseDialogSetting);\r
37         DDX_Control(pDX, IDC_SELECT_ALL, m_cSelectAll);\r
38         DDX_Control(pDX, IDC_CLEAR_ALL, m_cClearAll);\r
39         DDX_Control(pDX, IDC_LOAD_DEFAULT, m_cLoadDefault);\r
40         DDX_Control(pDX, IDC_APPLICATION, m_cApplication);\r
41         DDX_Radio(pDX, IDC_SETTING_DEFAULT, m_nSettingStyle);\r
42         DDX_Text(pDX, IDC_KILL_RING_MAX, m_nKillRingMax);\r
43         DDV_MinMaxInt(pDX, m_nKillRingMax, 0, 2147483647);\r
44         //}}AFX_DATA_MAP\r
45 }\r
46 \r
47 \r
48 BEGIN_MESSAGE_MAP(CProperties, CDialog)\r
49         //{{AFX_MSG_MAP(CProperties)\r
50         ON_CBN_DROPDOWN(IDC_APPLICATION, OnDropdownApplication)\r
51         ON_CBN_SELCHANGE(IDC_APPLICATION, OnSelchangeApplication)\r
52         ON_BN_CLICKED(IDC_APPLY, OnApply)\r
53         ON_BN_CLICKED(IDC_LOAD_DEFAULT, OnLoadDefault)\r
54         ON_BN_CLICKED(IDC_SELECT_ALL, OnSelectAll)\r
55         ON_BN_CLICKED(IDC_CLEAR_ALL, OnClearAll)\r
56         ON_BN_CLICKED(IDC_SETTING_DEFAULT, OnSettingDefault)\r
57         ON_BN_CLICKED(IDC_SETTING_DISABLE, OnSettingDisable)\r
58         ON_BN_CLICKED(IDC_SETTING_SPECIFIC, OnSettingSpecific)\r
59         //}}AFX_MSG_MAP\r
60 END_MESSAGE_MAP()\r
61 \r
62 /////////////////////////////////////////////////////////////////////////////\r
63 // CProperties message handlers\r
64 \r
65 BOOL CProperties::OnInitDialog() \r
66 {\r
67         CDialog::OnInitDialog();\r
68         \r
69         while (m_sheet.GetPageCount()) {\r
70                 m_sheet.RemovePage(0);\r
71         }\r
72 \r
73         m_sheet.AddPage(&m_basic);\r
74         m_sheet.AddPage(&m_advanced);\r
75         m_sheet.AddPage(&m_list);\r
76 \r
77         m_sheet.Create(this, WS_CHILD | WS_VISIBLE, 0);\r
78         m_sheet.ModifyStyleEx (0, WS_EX_CONTROLPARENT);\r
79         m_sheet.ModifyStyle( 0, WS_TABSTOP );\r
80 \r
81         CRect rcSheet;\r
82         GetDlgItem(IDC_TAB)->GetWindowRect(&rcSheet);\r
83         ScreenToClient(&rcSheet);\r
84         m_sheet.SetWindowPos(NULL, rcSheet.left - 11, rcSheet.top - 8, 0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE);\r
85 \r
86 \r
87         SetForegroundWindow();\r
88 \r
89         InitApplicationList();\r
90 \r
91         CProfile::LoadData();\r
92         m_appName.LoadString(IDS_DEFAULT);\r
93         SetDialogData();\r
94         EnableUseDefaultButton(FALSE);\r
95         EnableLoadDefaultButton(FALSE);\r
96 \r
97         EnableControl(BASIC_TAB);\r
98 \r
99         return TRUE;  // return TRUE unless you set the focus to a control\r
100                       // EXCEPTION: OCX Property Pages should return FALSE\r
101 }\r
102 \r
103 void CProperties::OnDropdownApplication() \r
104 {\r
105         InitApplicationList();\r
106 \r
107         int nID = GetCurrentApplicationID();\r
108         if (nID != CB_ERR) {\r
109                 m_cApplication.SetCurSel(nID);\r
110         } else {\r
111                 GetDialogData();\r
112                 m_appName.LoadString(IDS_DEFAULT_TITLE);\r
113                 m_cApplication.SelectString(-1, m_appName);\r
114                 SetDialogData();\r
115         }\r
116 }\r
117 \r
118 void CProperties::OnSelchangeApplication() \r
119 {\r
120         GetDialogData();\r
121 \r
122         CProfile::GetApplicationTitle(&m_cApplication, m_appName, m_cApplication.GetCurSel());\r
123         int nStart;\r
124         if ((nStart = m_appName.ReverseFind(_T('('))) != -1) {\r
125                 ++nStart;\r
126                 m_appName =\r
127                         m_appName.Mid(nStart, m_appName.GetLength() - nStart - 1);\r
128         }\r
129 \r
130         SetDialogData();\r
131         EnableControl(ACTIVE_TAB);\r
132 }\r
133 \r
134 void CProperties::InitApplicationList()\r
135 {\r
136         CProfile::InitApplicationList(&m_cApplication);\r
137 }\r
138 \r
139 int CProperties::GetCurrentApplicationID()\r
140 {\r
141         return CProfile::GetCurrentApplicationID(&m_cApplication, m_appName);\r
142 }\r
143 \r
144 void CProperties::GetDialogData()\r
145 {\r
146         UpdateData();\r
147         if (m_nSettingStyle == SETTING_DEFAULT) {\r
148                 CProfile::ClearData(m_appName);\r
149                 return;\r
150         }\r
151         m_nAppID = CProfile::AssignAppID(m_appName);\r
152         CProfile::SetSettingStyle(m_nAppID, m_nSettingStyle);\r
153         CProfile::UpdateApplicationTitle(&m_cApplication, m_appName, m_nAppID, TRUE);\r
154         CProfile::SetKillRingMax(m_nAppID, m_nKillRingMax);\r
155         CProfile::SetUseDialogSetting(m_nAppID, m_cUseDialogSetting.GetCheck() == BST_CHECKED);\r
156         CString szWindowText;\r
157         m_cWindowText.GetWindowText(szWindowText);\r
158         CProfile::SetWindowText(m_nAppID, szWindowText);\r
159 \r
160         if (m_sheet.GetActivePage() == &m_basic) // FIXME\r
161                 m_basic.GetDialogData();\r
162         else if (m_sheet.GetActivePage() == &m_advanced)\r
163                 m_advanced.GetDialogData();\r
164         else if (m_sheet.GetActivePage() ==  &m_list)\r
165                 m_list.GetDialogData();\r
166 }\r
167 \r
168 void CProperties::SetDialogData()\r
169 {\r
170         m_nAppID = CProfile::GetAppID(m_appName);\r
171         m_nSettingStyle = CProfile::GetSettingStyle(m_nAppID);\r
172         if (m_nAppID == MAX_APP)\r
173                 m_nAppID = CProfile::DefaultAppID(); // fall back to the default\r
174         EnableUseDefaultButton(!CProfile::IsDefault(m_appName) && !CProfile::IsDialog(m_appName));\r
175         CProfile::UpdateApplicationTitle(&m_cApplication, m_appName, m_nAppID, FALSE);\r
176         m_nKillRingMax = CProfile::GetKillRingMax(m_nAppID);\r
177         m_cUseDialogSetting.SetCheck(CProfile::GetUseDialogSetting(m_nAppID) ? BST_CHECKED : BST_UNCHECKED);\r
178         m_cWindowText.SetWindowText(CProfile::GetWindowText(m_nAppID));\r
179         UpdateData(FALSE);\r
180 \r
181         if (m_sheet.GetActivePage() == &m_basic) // FIXME\r
182                 m_basic.SetDialogData();\r
183         else if (m_sheet.GetActivePage() == &m_advanced)\r
184                 m_advanced.SetDialogData();\r
185         else if (m_sheet.GetActivePage() ==  &m_list)\r
186                 m_list.SetDialogData();\r
187 }\r
188 \r
189 void CProperties::EnableControl(TAB_NAME tab)\r
190 {\r
191         if (tab & ACTIVE_TAB) {\r
192                 if (m_sheet.GetActivePage() == &m_basic) {      // FIXME\r
193                         tab = BASIC_TAB;\r
194                 } else if (m_sheet.GetActivePage() == &m_advanced) {\r
195                         tab = ADVANCED_TAB;\r
196                 } else if (m_sheet.GetActivePage() == &m_list) {\r
197                         tab = LIST_TAB;\r
198                 }\r
199         }\r
200 \r
201         BOOL bEnable = (m_nSettingStyle == SETTING_SPECIFIC);\r
202 \r
203         m_cKillRingMax.EnableWindow(bEnable);\r
204         EnableLoadDefaultButton(bEnable);\r
205 \r
206         m_cSelectAll.EnableWindow(bEnable && tab & BASIC_TAB);\r
207         m_cClearAll.EnableWindow(bEnable && tab & BASIC_TAB);\r
208 \r
209         EnableUseDialogSettingButton(bEnable);\r
210 \r
211         m_cWindowText.EnableWindow(bEnable);\r
212 \r
213         if (tab & BASIC_TAB) {\r
214                 m_basic.EnableControl();\r
215         }\r
216         if (tab & ADVANCED_TAB) {\r
217                 m_advanced.EnableControl();\r
218         }\r
219         if (tab & LIST_TAB) {\r
220                 m_list.EnableControl();\r
221         }\r
222 }\r
223 \r
224 void CProperties::EnableUseDialogSettingButton(BOOL bEnable)\r
225 {\r
226         m_cUseDialogSetting.EnableWindow(bEnable);\r
227         if (CProfile::IsDialog(m_appName)) {\r
228                 m_cUseDialogSetting.EnableWindow(FALSE);\r
229         }\r
230 }\r
231 \r
232 void CProperties::EnableLoadDefaultButton(BOOL bEnable)\r
233 {\r
234         m_cLoadDefault.EnableWindow(bEnable);\r
235         if (CProfile::IsDefault(m_appName)) {\r
236                 m_cLoadDefault.EnableWindow(FALSE);\r
237         }\r
238 }\r
239 \r
240 void CProperties::EnableUseDefaultButton(BOOL bEnable)\r
241 {\r
242         if (GetDlgItem(IDC_SETTING_DEFAULT)) {\r
243                 GetDlgItem(IDC_SETTING_DEFAULT)->EnableWindow(bEnable);\r
244         }\r
245 }\r
246 \r
247 void CProperties::OnOK() \r
248 {\r
249         OnApply();\r
250 \r
251         CDialog::OnOK();\r
252 }\r
253 \r
254 void CProperties::OnCancel() \r
255 {\r
256         CProfile::LoadData();\r
257 \r
258         CDialog::OnCancel();\r
259 }\r
260 \r
261 void CProperties::OnApply() \r
262 {\r
263         GetDialogData();\r
264         CProfile::SaveData();\r
265 }\r
266 \r
267 void CProperties::OnLoadDefault() \r
268 {\r
269         CProfile::CopyData(m_appName, CString(MAKEINTRESOURCE(IDS_DEFAULT)));\r
270         SetDialogData();\r
271 }\r
272 \r
273 void CProperties::OnSelectAll() \r
274 {\r
275         m_basic.SetAllDialogData(1, TRUE);\r
276 }\r
277 \r
278 void CProperties::OnClearAll() \r
279 {\r
280         m_basic.SetAllDialogData(0, TRUE);\r
281 }\r
282 \r
283 int CProperties::GetApplicationID()\r
284 {\r
285         return m_nAppID;\r
286 }\r
287 \r
288 CString CProperties::GetCurrentApplication()\r
289 {\r
290         return m_appName;\r
291 }\r
292 \r
293 void CProperties::OnSettingDefault() \r
294 {\r
295         UpdateData(); // get data\r
296         EnableControl(ACTIVE_TAB);\r
297 }\r
298 \r
299 void CProperties::OnSettingDisable() \r
300 {\r
301         UpdateData();\r
302         EnableControl(ACTIVE_TAB);\r
303 }\r
304 \r
305 void CProperties::OnSettingSpecific() \r
306 {\r
307         UpdateData();\r
308         EnableControl(ACTIVE_TAB);\r
309 \r
310         if (CProfile::GetAppID(m_appName) == MAX_APP) {\r
311                 CProfile::CopyData(m_appName, CString(MAKEINTRESOURCE(IDS_DEFAULT)));\r
312                 SetDialogData();\r
313         }\r
314 }\r
315 \r
316 BOOL CProperties::IsEnableControl()\r
317 {\r
318         return m_nSettingStyle == SETTING_SPECIFIC;\r
319 }\r