1 // Properties.cpp : implementation file
\r
5 #include "xkeymacs.h"
\r
7 #include "Properties.h"
\r
10 #define new DEBUG_NEW
\r
12 static char THIS_FILE[] = __FILE__;
\r
15 /////////////////////////////////////////////////////////////////////////////
\r
16 // CProperties dialog
\r
19 CProperties::CProperties(CWnd* pParent /*=NULL*/)
\r
20 : CDialog(CProperties::IDD, pParent)
\r
23 //{{AFX_DATA_INIT(CProperties)
\r
24 m_nSettingStyle = -1;
\r
30 void CProperties::DoDataExchange(CDataExchange* pDX)
\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
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
62 /////////////////////////////////////////////////////////////////////////////
\r
63 // CProperties message handlers
\r
65 BOOL CProperties::OnInitDialog()
\r
67 CDialog::OnInitDialog();
\r
69 while (m_sheet.GetPageCount()) {
\r
70 m_sheet.RemovePage(0);
\r
73 m_sheet.AddPage(&m_basic);
\r
74 m_sheet.AddPage(&m_advanced);
\r
75 m_sheet.AddPage(&m_list);
\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
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
87 SetForegroundWindow();
\r
89 InitApplicationList();
\r
91 CProfile::LoadData();
\r
92 m_appName.LoadString(IDS_DEFAULT);
\r
94 EnableUseDefaultButton(FALSE);
\r
95 EnableLoadDefaultButton(FALSE);
\r
97 EnableControl(BASIC_TAB);
\r
99 return TRUE; // return TRUE unless you set the focus to a control
\r
100 // EXCEPTION: OCX Property Pages should return FALSE
\r
103 void CProperties::OnDropdownApplication()
\r
105 InitApplicationList();
\r
107 int nID = GetCurrentApplicationID();
\r
108 if (nID != CB_ERR) {
\r
109 m_cApplication.SetCurSel(nID);
\r
112 m_appName.LoadString(IDS_DEFAULT_TITLE);
\r
113 m_cApplication.SelectString(-1, m_appName);
\r
118 void CProperties::OnSelchangeApplication()
\r
122 CProfile::GetApplicationTitle(&m_cApplication, m_appName, m_cApplication.GetCurSel());
\r
124 if ((nStart = m_appName.ReverseFind(_T('('))) != -1) {
\r
127 m_appName.Mid(nStart, m_appName.GetLength() - nStart - 1);
\r
131 EnableControl(ACTIVE_TAB);
\r
134 void CProperties::InitApplicationList()
\r
136 CProfile::InitApplicationList(&m_cApplication);
\r
139 int CProperties::GetCurrentApplicationID()
\r
141 return CProfile::GetCurrentApplicationID(&m_cApplication, m_appName);
\r
144 void CProperties::GetDialogData()
\r
147 if (m_nSettingStyle == SETTING_DEFAULT) {
\r
148 CProfile::ClearData(m_appName);
\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
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
168 void CProperties::SetDialogData()
\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
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
189 void CProperties::EnableControl(TAB_NAME tab)
\r
191 if (tab & ACTIVE_TAB) {
\r
192 if (m_sheet.GetActivePage() == &m_basic) { // FIXME
\r
194 } else if (m_sheet.GetActivePage() == &m_advanced) {
\r
195 tab = ADVANCED_TAB;
\r
196 } else if (m_sheet.GetActivePage() == &m_list) {
\r
201 BOOL bEnable = (m_nSettingStyle == SETTING_SPECIFIC);
\r
203 m_cKillRingMax.EnableWindow(bEnable);
\r
204 EnableLoadDefaultButton(bEnable);
\r
206 m_cSelectAll.EnableWindow(bEnable && tab & BASIC_TAB);
\r
207 m_cClearAll.EnableWindow(bEnable && tab & BASIC_TAB);
\r
209 EnableUseDialogSettingButton(bEnable);
\r
211 m_cWindowText.EnableWindow(bEnable);
\r
213 if (tab & BASIC_TAB) {
\r
214 m_basic.EnableControl();
\r
216 if (tab & ADVANCED_TAB) {
\r
217 m_advanced.EnableControl();
\r
219 if (tab & LIST_TAB) {
\r
220 m_list.EnableControl();
\r
224 void CProperties::EnableUseDialogSettingButton(BOOL bEnable)
\r
226 m_cUseDialogSetting.EnableWindow(bEnable);
\r
227 if (CProfile::IsDialog(m_appName)) {
\r
228 m_cUseDialogSetting.EnableWindow(FALSE);
\r
232 void CProperties::EnableLoadDefaultButton(BOOL bEnable)
\r
234 m_cLoadDefault.EnableWindow(bEnable);
\r
235 if (CProfile::IsDefault(m_appName)) {
\r
236 m_cLoadDefault.EnableWindow(FALSE);
\r
240 void CProperties::EnableUseDefaultButton(BOOL bEnable)
\r
242 if (GetDlgItem(IDC_SETTING_DEFAULT)) {
\r
243 GetDlgItem(IDC_SETTING_DEFAULT)->EnableWindow(bEnable);
\r
247 void CProperties::OnOK()
\r
254 void CProperties::OnCancel()
\r
256 CProfile::LoadData();
\r
258 CDialog::OnCancel();
\r
261 void CProperties::OnApply()
\r
264 CProfile::SaveData();
\r
267 void CProperties::OnLoadDefault()
\r
269 CProfile::CopyData(m_appName, CString(MAKEINTRESOURCE(IDS_DEFAULT)));
\r
273 void CProperties::OnSelectAll()
\r
275 m_basic.SetAllDialogData(1, TRUE);
\r
278 void CProperties::OnClearAll()
\r
280 m_basic.SetAllDialogData(0, TRUE);
\r
283 int CProperties::GetApplicationID()
\r
288 CString CProperties::GetCurrentApplication()
\r
293 void CProperties::OnSettingDefault()
\r
295 UpdateData(); // get data
\r
296 EnableControl(ACTIVE_TAB);
\r
299 void CProperties::OnSettingDisable()
\r
302 EnableControl(ACTIVE_TAB);
\r
305 void CProperties::OnSettingSpecific()
\r
308 EnableControl(ACTIVE_TAB);
\r
310 if (CProfile::GetAppID(m_appName) == MAX_APP) {
\r
311 CProfile::CopyData(m_appName, CString(MAKEINTRESOURCE(IDS_DEFAULT)));
\r
316 BOOL CProperties::IsEnableControl()
\r
318 return m_nSettingStyle == SETTING_SPECIFIC;
\r