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_cAppList);
\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
86 SetForegroundWindow();
\r
90 CProfile::LoadData();
\r
91 m_appName.LoadString(IDS_DEFAULT);
\r
93 EnableUseDefaultButton(FALSE);
\r
94 EnableLoadDefaultButton(FALSE);
\r
96 EnableControl(BASIC_TAB);
\r
98 return TRUE; // return TRUE unless you set the focus to a control
\r
99 // EXCEPTION: OCX Property Pages should return FALSE
\r
102 void CProperties::OnDropdownApplication()
\r
106 for (i = 0; i < m_cAppList.GetCount(); ++i) {
\r
107 CString appTitle, appName;
\r
108 GetAppTitleAndName(i, appTitle, appName);
\r
109 if (m_appName == appName)
\r
110 m_cAppList.SetCurSel(i);
\r
112 if (i == m_cAppList.GetCount()) {
\r
113 m_appTitle.LoadString(IDS_DEFAULT_TITLE);
\r
114 m_cAppList.SelectString(-1, m_appTitle);
\r
119 void CProperties::OnSelchangeApplication()
\r
121 GetAppTitleAndName(m_cAppList.GetCurSel(), m_appTitle, m_appName);
\r
123 EnableControl(ACTIVE_TAB);
\r
126 void CProperties::InitAppList()
\r
128 m_cAppList.ResetContent();
\r
129 CProfile::InitAppList(*this);
\r
131 m_cAppList.InsertString(0, CString(MAKEINTRESOURCE(IDS_DIALOG_TITLE)));
\r
133 m_cAppList.InsertString( 0, CString(MAKEINTRESOURCE(IDS_DEFAULT_TITLE)));
\r
134 m_cAppList.SelectString(-1, CString(MAKEINTRESOURCE(IDS_DEFAULT_TITLE)));
\r
137 void CProperties::GetDialogData()
\r
140 if (m_nSettingStyle == SETTING_DEFAULT) {
\r
141 CProfile::ClearData(m_appName);
\r
144 m_nAppID = CProfile::AssignAppID(m_appName);
\r
145 CProfile::SetSettingStyle(m_nAppID, m_nSettingStyle);
\r
146 CProfile::SetAppTitle(m_nAppID, m_appTitle);
\r
147 CProfile::SetKillRingMax(m_nAppID, m_nKillRingMax);
\r
148 CProfile::SetUseDialogSetting(m_nAppID, m_cUseDialogSetting.GetCheck() == BST_CHECKED);
\r
149 CString szWindowText;
\r
150 m_cWindowText.GetWindowText(szWindowText);
\r
151 CProfile::SetWindowText(m_nAppID, szWindowText);
\r
153 if (m_sheet.GetActivePage() == &m_basic) // FIXME
\r
154 m_basic.GetDialogData();
\r
155 else if (m_sheet.GetActivePage() == &m_advanced)
\r
156 m_advanced.GetDialogData();
\r
157 else if (m_sheet.GetActivePage() == &m_list)
\r
158 m_list.GetDialogData();
\r
161 void CProperties::SetDialogData()
\r
163 m_nAppID = CProfile::GetAppID(m_appName);
\r
164 m_nSettingStyle = CProfile::GetSettingStyle(m_nAppID);
\r
165 if (m_nAppID == MAX_APP)
\r
166 m_nAppID = CProfile::DefaultAppID(); // fall back to the default
\r
167 EnableUseDefaultButton(m_appName != CString(MAKEINTRESOURCE(IDS_DEFAULT)) &&
\r
168 m_appName != CString(MAKEINTRESOURCE(IDS_DIALOG)));
\r
169 m_nKillRingMax = CProfile::GetKillRingMax(m_nAppID);
\r
170 m_cUseDialogSetting.SetCheck(CProfile::GetUseDialogSetting(m_nAppID) ? BST_CHECKED : BST_UNCHECKED);
\r
171 m_cWindowText.SetWindowText(CProfile::GetWindowText(m_nAppID));
\r
174 if (m_sheet.GetActivePage() == &m_basic) // FIXME
\r
175 m_basic.SetDialogData();
\r
176 else if (m_sheet.GetActivePage() == &m_advanced)
\r
177 m_advanced.SetDialogData();
\r
178 else if (m_sheet.GetActivePage() == &m_list)
\r
179 m_list.SetDialogData();
\r
182 void CProperties::AddItem(const CString& appTitle, const CString& appName)
\r
184 for (int i = 0; i < m_cAppList.GetCount(); ++i) {
\r
185 CString tmpTitle, tmpName;
\r
186 GetAppTitleAndName(i, tmpTitle, tmpName);
\r
187 if (appName == tmpName)
\r
191 item.Format(IDS_APPLICATION_LIST_ITEM, appTitle, appName);
\r
192 m_cAppList.AddString(item);
\r
195 void CProperties::GetAppTitleAndName(const int nSel, CString& appTitle, CString& appName)
\r
201 m_cAppList.GetWindowText(item);
\r
203 m_cAppList.GetLBText(nSel, item);
\r
205 if (item == CString(MAKEINTRESOURCE(IDS_DEFAULT_TITLE))) {
\r
206 appName.LoadString(IDS_DEFAULT);
\r
209 if (item == CString(MAKEINTRESOURCE(IDS_DIALOG_TITLE))) {
\r
210 appName.LoadString(IDS_DIALOG);
\r
213 int nParen = item.ReverseFind(_T('('));
\r
216 appTitle = item.Left(nParen);
\r
217 appName = item.Mid(nParen + 1, item.GetLength() - nParen -2);
\r
220 void CProperties::EnableControl(TAB_NAME tab)
\r
222 if (tab & ACTIVE_TAB) {
\r
223 if (m_sheet.GetActivePage() == &m_basic) { // FIXME
\r
225 } else if (m_sheet.GetActivePage() == &m_advanced) {
\r
226 tab = ADVANCED_TAB;
\r
227 } else if (m_sheet.GetActivePage() == &m_list) {
\r
232 BOOL bEnable = (m_nSettingStyle == SETTING_SPECIFIC);
\r
234 m_cKillRingMax.EnableWindow(bEnable);
\r
235 EnableLoadDefaultButton(bEnable);
\r
237 m_cSelectAll.EnableWindow(bEnable && tab & BASIC_TAB);
\r
238 m_cClearAll.EnableWindow(bEnable && tab & BASIC_TAB);
\r
240 EnableUseDialogSettingButton(bEnable);
\r
242 m_cWindowText.EnableWindow(bEnable);
\r
244 if (tab & BASIC_TAB) {
\r
245 m_basic.EnableControl();
\r
247 if (tab & ADVANCED_TAB) {
\r
248 m_advanced.EnableControl();
\r
250 if (tab & LIST_TAB) {
\r
251 m_list.EnableControl();
\r
255 void CProperties::EnableUseDialogSettingButton(BOOL bEnable)
\r
257 m_cUseDialogSetting.EnableWindow(bEnable);
\r
258 if (m_appName == CString(MAKEINTRESOURCE(IDS_DIALOG)))
\r
259 m_cUseDialogSetting.EnableWindow(FALSE);
\r
262 void CProperties::EnableLoadDefaultButton(BOOL bEnable)
\r
264 m_cLoadDefault.EnableWindow(bEnable);
\r
265 if (m_appName == CString(MAKEINTRESOURCE(IDS_DEFAULT)))
\r
266 m_cLoadDefault.EnableWindow(FALSE);
\r
269 void CProperties::EnableUseDefaultButton(BOOL bEnable)
\r
271 if (GetDlgItem(IDC_SETTING_DEFAULT)) {
\r
272 GetDlgItem(IDC_SETTING_DEFAULT)->EnableWindow(bEnable);
\r
276 void CProperties::OnOK()
\r
283 void CProperties::OnCancel()
\r
285 CProfile::LoadData();
\r
287 CDialog::OnCancel();
\r
290 void CProperties::OnApply()
\r
293 CProfile::SaveData();
\r
296 void CProperties::OnLoadDefault()
\r
298 CProfile::CopyData(m_appName, CString(MAKEINTRESOURCE(IDS_DEFAULT)));
\r
302 void CProperties::OnSelectAll()
\r
304 m_basic.SetAllDialogData(1, TRUE);
\r
307 void CProperties::OnClearAll()
\r
309 m_basic.SetAllDialogData(0, TRUE);
\r
312 int CProperties::GetApplicationID()
\r
317 CString CProperties::GetCurrentApplication()
\r
322 void CProperties::OnSettingDefault()
\r
324 UpdateData(); // get data
\r
325 EnableControl(ACTIVE_TAB);
\r
328 void CProperties::OnSettingDisable()
\r
331 EnableControl(ACTIVE_TAB);
\r
334 void CProperties::OnSettingSpecific()
\r
337 EnableControl(ACTIVE_TAB);
\r
339 if (CProfile::GetAppID(m_appName) == MAX_APP) {
\r
340 CProfile::CopyData(m_appName, CString(MAKEINTRESOURCE(IDS_DEFAULT)));
\r
345 BOOL CProperties::IsEnableControl()
\r
347 return m_nSettingStyle == SETTING_SPECIFIC;
\r