OSDN Git Service

Fix a bug where the choice of the default setting for an application
[xkeymacs/xkeymacs.git] / xkeymacs / optionsdlg.cpp
1 // OptionsDlg.cpp : implementation file\r
2 //\r
3 \r
4 #include "stdafx.h"\r
5 #include "xkeymacs.h"\r
6 #include "OptionsDlg.h"\r
7 #include "MainFrm.h"\r
8 #include "Profile.h"\r
9 \r
10 #ifdef _DEBUG\r
11 #define new DEBUG_NEW\r
12 #undef THIS_FILE\r
13 static char THIS_FILE[] = __FILE__;\r
14 #endif\r
15 \r
16 /////////////////////////////////////////////////////////////////////////////\r
17 // COptionsDlg dialog\r
18 \r
19 \r
20 COptionsDlg::COptionsDlg(CWnd *pParent /*=NULL*/)\r
21         : CDialog(COptionsDlg::IDD, pParent)\r
22 {\r
23         //{{AFX_DATA_INIT(COptionsDlg)\r
24         //}}AFX_DATA_INIT\r
25 }\r
26 \r
27 COptionsDlg::~COptionsDlg()\r
28 {\r
29 }\r
30 \r
31 void COptionsDlg::DoDataExchange(CDataExchange *pDX)\r
32 {\r
33         CDialog::DoDataExchange(pDX);\r
34         //{{AFX_DATA_MAP(COptionsDlg)\r
35         DDX_Control(pDX, IDC_M_X, m_cMx);\r
36         DDX_Control(pDX, IDC_M_, m_cM_);\r
37         DDX_Control(pDX, IDC_ALT, m_cAlt);\r
38         DDX_Control(pDX, IDC_SHIFT, m_cShift);\r
39         DDX_Control(pDX, IDC_CTRL, m_cCtrl);\r
40         DDX_Control(pDX, IDC_C_X_, m_cCx);\r
41         DDX_Control(pDX, IDC_FILE_COMPLETION, m_cFileCompletion);\r
42         DDX_Control(pDX, IDC_AUTO_RUN, m_cAutoRun);\r
43         DDX_Control(pDX, IDOK, m_cOK);\r
44         //}}AFX_DATA_MAP\r
45 }\r
46 \r
47 \r
48 BEGIN_MESSAGE_MAP(COptionsDlg, CDialog)\r
49         //{{AFX_MSG_MAP(COptionsDlg)\r
50         //}}AFX_MSG_MAP\r
51 END_MESSAGE_MAP()\r
52 \r
53 /////////////////////////////////////////////////////////////////////////////\r
54 // COptionsDlg message handlers\r
55 \r
56 BOOL COptionsDlg::OnInitDialog() \r
57 {\r
58         CDialog::OnInitDialog();\r
59         \r
60         // clear all check\r
61         m_cAutoRun.SetCheck(0);\r
62         m_cCx.SetCheck(0);\r
63         m_cMx.SetCheck(0);\r
64         m_cM_.SetCheck(0);\r
65         m_cShift.SetCheck(0);\r
66         m_cCtrl.SetCheck(0);\r
67         m_cAlt.SetCheck(0);\r
68 \r
69         // for auto run\r
70         {\r
71                 TCHAR szFileName[MAX_PATH] = {'\0'};\r
72                 GetModuleFileName(NULL, szFileName, sizeof(szFileName));\r
73                 HKEY hKey = NULL;\r
74 \r
75                 if (RegOpenKeyEx(HKEY_CURRENT_USER,  CString(MAKEINTRESOURCE(IDS_REGSUBKEY_AUTORUN)), 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS\r
76                  || RegOpenKeyEx(HKEY_LOCAL_MACHINE, CString(MAKEINTRESOURCE(IDS_REGSUBKEY_AUTORUN)), 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS) {\r
77                         DWORD dwType = REG_SZ;\r
78                         TCHAR szSavedFileName[MAX_PATH] = {'\0'};\r
79                         DWORD dwBufLen = sizeof(szSavedFileName);\r
80                         RegQueryValueEx(hKey, CString(MAKEINTRESOURCE(AFX_IDS_APP_TITLE)), NULL, &dwType,\r
81                                                         (LPBYTE)szSavedFileName, &dwBufLen);\r
82                         RegCloseKey(hKey);\r
83 \r
84                         if (!_tcsnicmp(szFileName, szSavedFileName, sizeof(szFileName))) {\r
85                                 m_cAutoRun.SetCheck(1);\r
86                         }\r
87                 }\r
88         }\r
89 \r
90         // for file and directory name completion\r
91         HKEY hKey = NULL;\r
92 \r
93         if (RegOpenKeyEx(HKEY_CURRENT_USER,  CString(MAKEINTRESOURCE(IDS_REGSUBKEY_FILE_COMPLETION)), 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS\r
94                         || RegOpenKeyEx(HKEY_LOCAL_MACHINE, CString(MAKEINTRESOURCE(IDS_REGSUBKEY_FILE_COMPLETION)), 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) {\r
95                 DWORD dwType = REG_DWORD;\r
96                 DWORD dwCompletionChar = 0;\r
97                 DWORD dwcbData = sizeof(dwCompletionChar);\r
98                 RegQueryValueEx(hKey, CString(MAKEINTRESOURCE(IDS_COMPLETION_CHAR)), NULL, &dwType,\r
99                         (LPBYTE)&dwCompletionChar, &dwcbData);\r
100                 RegCloseKey(hKey);\r
101                 if (dwCompletionChar == 0x9) {\r
102                         m_cFileCompletion.SetCheck(1);\r
103                 }\r
104         }\r
105 \r
106         // for icons in the taskbar's status area\r
107         m_cCx.SetCheck(AfxGetApp()->GetProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_CX)), 0));\r
108         m_cMx.SetCheck(AfxGetApp()->GetProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_MX)), 0));\r
109         m_cM_.SetCheck(AfxGetApp()->GetProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_META)), 0));\r
110         m_cShift.SetCheck(AfxGetApp()->GetProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_SHIFT)), 0));\r
111         m_cCtrl.SetCheck(AfxGetApp()->GetProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_CTRL)), 0));\r
112         m_cAlt.SetCheck(AfxGetApp()->GetProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_ALT)), 0));\r
113 \r
114         return TRUE;  // return TRUE unless you set the focus to a control\r
115                       // EXCEPTION: OCX Property Pages should return FALSE\r
116 }\r
117 \r
118 void COptionsDlg::OnOK() \r
119 {\r
120         // for auto run\r
121         {\r
122                 TCHAR szFileName[MAX_PATH] = {'\0'};\r
123                 GetModuleFileName(NULL, szFileName, sizeof(szFileName));\r
124                 HKEY hKey = NULL;\r
125 \r
126                 DWORD dwDisposition;\r
127                 if (RegCreateKeyEx(HKEY_CURRENT_USER, CString(MAKEINTRESOURCE(IDS_REGSUBKEY_AUTORUN)), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition) == ERROR_SUCCESS) {\r
128                         if (m_cAutoRun.GetCheck() == 1) {\r
129                                 RegSetValueEx(hKey, CString(MAKEINTRESOURCE(AFX_IDS_APP_TITLE)), 0, REG_SZ, (LPBYTE)szFileName, _tcslen(szFileName));\r
130                         } else {\r
131                                 RegDeleteValue(hKey, CString(MAKEINTRESOURCE(AFX_IDS_APP_TITLE)));\r
132                         }\r
133                         RegCloseKey(hKey);\r
134                 }\r
135         }\r
136 \r
137         // for file and directory name completion\r
138         HKEY hKey = NULL;\r
139 \r
140         if (RegCreateKeyEx(HKEY_CURRENT_USER, CString(MAKEINTRESOURCE(IDS_REGSUBKEY_FILE_COMPLETION)), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, NULL, &hKey, NULL) == ERROR_SUCCESS) {\r
141                 DWORD dwCompletionChar;\r
142                 if (m_cFileCompletion.GetCheck() == 1) {\r
143                         dwCompletionChar = 0x9; // use enum\r
144                 } else {\r
145                         dwCompletionChar = 0x0;\r
146                 }\r
147                 RegSetValueEx(hKey, CString(MAKEINTRESOURCE(IDS_COMPLETION_CHAR)), 0, REG_DWORD,\r
148                         (LPBYTE)&dwCompletionChar, sizeof(dwCompletionChar));\r
149                 RegCloseKey(hKey);\r
150         }\r
151 \r
152         // for icons in the taskbar's status area\r
153         {\r
154                 // write data in registry\r
155                 AfxGetApp()->WriteProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_CX)), m_cCx.GetCheck());\r
156                 AfxGetApp()->WriteProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_MX)), m_cMx.GetCheck());\r
157                 AfxGetApp()->WriteProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_META)), m_cM_.GetCheck());\r
158                 AfxGetApp()->WriteProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_SHIFT)), m_cShift.GetCheck());\r
159                 AfxGetApp()->WriteProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_CTRL)), m_cCtrl.GetCheck());\r
160                 AfxGetApp()->WriteProfileInt(CString(), CString(MAKEINTRESOURCE(IDS_REG_ENTRY_ALT)), m_cAlt.GetCheck());\r
161 \r
162                 // set dll data\r
163                 CMainFrame *pMainFrame = static_cast<CMainFrame*>(AfxGetMainWnd());\r
164                 pMainFrame->EnableShell_NotifyIcon(CX_ICON, m_cCx.GetCheck());\r
165                 pMainFrame->EnableShell_NotifyIcon(MX_ICON, m_cMx.GetCheck());\r
166                 pMainFrame->EnableShell_NotifyIcon(META_ICON, m_cM_.GetCheck());\r
167                 pMainFrame->EnableShell_NotifyIcon(SHIFT_ICON, m_cShift.GetCheck());\r
168                 pMainFrame->EnableShell_NotifyIcon(CTRL_ICON, m_cCtrl.GetCheck());\r
169                 pMainFrame->EnableShell_NotifyIcon(ALT_ICON, m_cAlt.GetCheck());\r
170         }\r
171 \r
172         CDialog::OnOK();\r
173 }\r