OSDN Git Service

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