Develop and Download Open Source Software

Browse CVS Repository

Contents of /tombo/Tombo/Src/TomboPropertyTab.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.6 - (show annotations) (download) (as text)
Sun Aug 27 11:11:36 2006 UTC (17 years, 7 months ago) by hirami
Branch: MAIN
CVS Tags: B231, B230, Tombo_2_0b2, Tombo_2_0b3, Tombo_2_0b1, Tombo_2_0b4, B228, B229, B226, B227, B224, B225, HEAD
Changes since 1.5: +4 -4 lines
File MIME type: text/x-c++src
- Create new project for WM5 platform.
	In current version, feature is same as PocketPC.

1 #include <windows.h>
2 #include <tchar.h>
3
4 #include "Tombo.h"
5 #include "resource.h"
6 #include "Message.h"
7 #include "Property.h"
8 #include "UniConv.h"
9 #include "TString.h"
10 #include "DialogTemplate.h"
11 #include "PropertyPage.h"
12 #include "TomboPropertyTab.h"
13 #include "FileSelector.h"
14
15 //////////////////////////////////////////
16 // defs
17 //////////////////////////////////////////
18
19 #define MEMO_TOP_DIR_NUM_HISTORY 8
20 #define FONTSIZE_MIN 6
21 #define FONTSIZE_MAX 32
22 #define DEFAULT_FONTNAME TEXT("Tahoma")
23 #define DEFAULT_FONTSIZE 9
24 #define CLEARTYPE_QUALITY 5
25
26 #define SIP_DELTA 16
27
28 static BOOL CreateDirectories(LPCTSTR pDir);
29
30 static void SetCheckBox(HWND hWnd, BOOL bChecked)
31 {
32 if (bChecked) {
33 SendMessage(hWnd, BM_SETCHECK, BST_CHECKED, 0);
34 } else {
35 SendMessage(hWnd, BM_SETCHECK, BST_UNCHECKED, 0);
36 }
37 }
38
39 static BOOL GetCheckBox(HWND hWnd)
40 {
41 if (SendMessage(hWnd, BM_GETCHECK, 0, 0) == BST_CHECKED) {
42 return TRUE;
43 } else {
44 return FALSE;
45 }
46 }
47
48 //////////////////////////////////////////
49 // TomboRoot setting tab
50 //////////////////////////////////////////
51
52 static DlgMsgRes aFolderRes[] = {
53 { IDC_PROPTAB_FOLDER_LABEL, MSG_ID_DLG_PROPTAB_FOLDER_LABEL },
54 { IDC_PROPTAB_FOLDER_HELP1, MSG_ID_DLG_PROPTAB_FOLDER_HELP1 },
55 { IDC_KEEPTITLE, MSG_ID_DLG_PROPTAB_FOLDER_SYNCTITLE },
56 { IDC_PROPTAB_FOLDER_HELP2, MSG_ID_DLG_PROPTAB_FOLDER_HELP2 },
57 { IDC_PROP_READONLY, MSG_ID_DLG_PROPTAB_FOLDER_READONLY },
58 };
59
60 void FolderTab::Init(HWND hDlg)
61 {
62 OverrideDlgMsg(hDlg, -1, aFolderRes, sizeof(aFolderRes)/sizeof(DlgMsgRes));
63
64 HWND hFolder = GetDlgItem(hDlg, IDC_TOPFOLDER);
65 LPCTSTR pHist = g_Property.GetTopDirHist();
66 SetHistoryToComboBox(hFolder, pHist);
67 if (GetWindowTextLength(hFolder) == 0) {
68 if (pProperty->GetTopDir()) {
69 SetWindowText(hFolder, pProperty->GetTopDir());
70 }
71 }
72
73 HWND hKeepTitle = GetDlgItem(hDlg, IDC_KEEPTITLE);
74 if (pProperty->GetKeepTitle()) {
75 SendMessage(hKeepTitle, BM_SETCHECK, BST_UNCHECKED, 0);
76 } else {
77 SendMessage(hKeepTitle, BM_SETCHECK, BST_CHECKED, 0);
78 }
79
80 HWND hOpenReadOnly = GetDlgItem(hDlg, IDC_PROP_READONLY);
81 if (pProperty->GetOpenReadOnly()) {
82 SendMessage(hOpenReadOnly, BM_SETCHECK, BST_CHECKED, 0);
83 } else {
84 SendMessage(hOpenReadOnly, BM_SETCHECK, BST_UNCHECKED, 0);
85 }
86 }
87
88 BOOL FolderTab::Apply(HWND hDlg)
89 {
90 HWND hKeepTitle = GetDlgItem(hDlg, IDC_KEEPTITLE);
91 if (SendMessage(hKeepTitle, BM_GETCHECK, 0, 0) == BST_CHECKED) {
92 pProperty->SetKeepTitle(FALSE);
93 } else {
94 pProperty->SetKeepTitle(TRUE);
95 }
96
97 TCHAR aTopPath[MAX_PATH];
98 HWND hTopPath = GetDlgItem(hDlg, IDC_TOPFOLDER);
99 GetWindowText(hTopPath, aTopPath, MAX_PATH);
100
101 // ����������
102 LPTSTR p = aTopPath;
103 while(*p == TEXT(' ') || *p == TEXT('\t')) p++;
104 if (_tcslen(p) == 0) {
105 SetFocus(hTopPath);
106 SendMessage(hTopPath, EM_SETSEL, 0, -1);
107 return FALSE;
108 }
109
110 #if defined(PLATFORM_WIN32)
111 if (_tcslen(p) == 3 && _istalpha(p[0]) && p[1] == TEXT(':') && p[2] == TEXT('\\')) {
112 return pProperty->SetTopDir(p);
113 } else if (_tcslen(p) == 2 && _istalpha(p[0]) && p[1] == TEXT(':')) {
114 p[2] = TEXT('\\');
115 p[3] = TEXT('\0');
116 return pProperty->SetTopDir(p);
117 } else {
118 ChopFileSeparator(p);
119 }
120 #endif
121 #if defined(_WIN32_WCE)
122 if (_tcscmp(p, TEXT("\\")) == 0) {
123 MessageBox(hDlg, MSG_ROOT_NOT_ALLOWED, TOMBO_APP_NAME, MB_ICONERROR | MB_OK);
124 SetFocus(hTopPath);
125 return FALSE;
126 }
127 ChopFileSeparator(p);
128 #endif
129 // �t�H���_�������`�F�b�N
130 WIN32_FIND_DATA fd;
131 HANDLE h = FindFirstFile(p, &fd);
132 if (h == INVALID_HANDLE_VALUE) {
133 // ��������
134 if (MessageBox(hDlg, MSG_IS_CREATE_DIR, MSG_CREATE_DIR_TTL, MB_ICONQUESTION | MB_OKCANCEL) == IDOK) {
135 if (!CreateDirectories(p)) {
136 MessageBox(hDlg, MSG_MKDIR_FAILED, TEXT("ERROR"), MB_ICONSTOP | MB_OK);
137 SetFocus(hTopPath);
138 SendMessage(hTopPath, EM_SETSEL, 0, -1);
139 return FALSE;
140 }
141 } else {
142 SetFocus(hTopPath);
143 SendMessage(hTopPath, EM_SETSEL, 0, -1);
144 return FALSE;
145 }
146 } else {
147 if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY == 0) {
148 // �f�B���N�g����������
149 SetFocus(hTopPath);
150 SendMessage(hTopPath, EM_SETSEL, 0, -1);
151 return FALSE;
152 }
153 FindClose(h);
154 }
155
156 // Save history
157 g_Property.SetTopDirHist(GetHistoryFromComboBox(hTopPath, p, MEMO_TOP_DIR_NUM_HISTORY));
158
159 HWND hReadOnly = GetDlgItem(hDlg, IDC_PROP_READONLY);
160 if (SendMessage(hReadOnly, BM_GETCHECK, 0, 0) == BST_CHECKED) {
161 pProperty->SetOpenReadOnly(TRUE);
162 } else {
163 pProperty->SetOpenReadOnly(FALSE);
164 }
165
166 return pProperty->SetTopDir(p);
167 }
168
169 BOOL FolderTab::OnCommand(HWND hDlg, WPARAM wParam, LPARAM lParam)
170 {
171 switch(LOWORD(wParam)) {
172 case IDC_FOLDERSEL:
173 {
174 FileSelector sel;
175 if (sel.Popup(g_hInstance, hDlg, MSG_CHOOSE_FOLDER, NULL) == IDOK) {
176 HWND hEdit = GetDlgItem(hDlg, IDC_TOPFOLDER);
177 SetWindowText(hEdit, sel.SelectedPath());
178 }
179 }
180 break;
181 }
182 return TRUE;
183 }
184
185 //////////////////////////////////////////
186 // Password timeout setting tab
187 //////////////////////////////////////////
188
189 static DlgMsgRes aPassTimeout[] = {
190 { IDC_PROPTAB_PASS_TIMEOUT_LABEL,MSG_ID_DLG_PROPTAB_PASSTO_LABEL },
191 { IDC_PROPTAB_PASS_TIMEOUT_HELP, MSG_ID_DLG_PROPTAB_PASSTO_HELP },
192 { IDC_PASS_TIMEOUT_USE_SAFEFILE, MSG_ID_DLG_PROPTAB_TIMEOUT_USE_SAFENAME},
193 { IDC_PROPTAB_PASS_TIMEOUT_SAFEFILE_HELP, MSG_ID_DLG_PROPTAB_TIMEOUT_USE_SAFENAME_HELP},
194 };
195
196 void PassTimeoutTab::Init(HWND hDlg)
197 {
198 OverrideDlgMsg(hDlg, -1, aPassTimeout, sizeof(aPassTimeout)/sizeof(DlgMsgRes));
199 HWND hTimeout = GetDlgItem(hDlg, IDC_PASS_TIMEOUT);
200 TCHAR buf[64];
201 wsprintf(buf, TEXT("%d"), pProperty->GetPassTimeout());
202 SetWindowText(hTimeout, buf);
203
204 HWND hSafeFileName = GetDlgItem(hDlg, IDC_PASS_TIMEOUT_USE_SAFEFILE);
205 if (pProperty->GetUseSafeFileName()) {
206 SendMessage(hSafeFileName, BM_SETCHECK, BST_CHECKED, 0);
207 } else {
208 SendMessage(hSafeFileName, BM_SETCHECK, BST_UNCHECKED, 0);
209 }
210 }
211
212 BOOL PassTimeoutTab::Apply(HWND hDlg)
213 {
214 HWND hTimeout = GetDlgItem(hDlg, IDC_PASS_TIMEOUT);
215 TCHAR buf[64];
216 DWORD n;
217
218 GetWindowText(hTimeout, buf, 64);
219
220 n = _ttol(buf);
221 if (n < 1 || n > 60) {
222 SetFocus(hTimeout);
223 return FALSE;
224 }
225 pProperty->SetPassTimeout(n);
226
227 HWND hSafeFileName = GetDlgItem(hDlg, IDC_PASS_TIMEOUT_USE_SAFEFILE);
228 if (SendMessage(hSafeFileName, BM_GETCHECK, 0, 0) == BST_CHECKED) {
229 pProperty->SetUseSafeFileName(TRUE);
230 } else {
231 pProperty->SetUseSafeFileName(FALSE);
232 }
233 return TRUE;
234 }
235
236 //////////////////////////////////////////
237 // Font setting tab
238 //////////////////////////////////////////
239
240 extern "C" static int CALLBACK PropEnumFonts(ENUMLOGFONT FAR *pFont, NEWTEXTMETRIC FAR *pMetric, int iFontType, LPARAM lParam);
241
242 static void SetFontName(HDC hDC, HWND hFontName, LPCTSTR pDefaultFontName)
243 {
244 EnumFontFamilies(hDC, NULL, (FONTENUMPROC)PropEnumFonts, (LPARAM)hFontName);
245 DWORD n = SendMessage(hFontName, CB_FINDSTRINGEXACT, -1, (LPARAM)pDefaultFontName);
246 if (n != CB_ERR) {
247 SendMessage(hFontName, CB_SETCURSEL, n, 0);
248 } else {
249 SendMessage(hFontName, CB_SETCURSEL, 0, 0);
250 }
251 }
252
253 static void SetFontSize(HWND hFontSize, DWORD nDefaultSize)
254 {
255 TCHAR buf[32];
256 BOOL bSet = FALSE;
257
258 for (DWORD i = FONTSIZE_MIN; i <= FONTSIZE_MAX; i++) {
259 wsprintf(buf, TEXT("%d"), i);
260 SendMessage(hFontSize, CB_ADDSTRING, 0, (LPARAM)buf);
261 if (i == nDefaultSize) {
262 bSet = TRUE;
263 SendMessage(hFontSize, CB_SETCURSEL, i - FONTSIZE_MIN, 0);
264 }
265 }
266 if (!bSet) {
267 wsprintf(buf, TEXT("%d"), nDefaultSize);
268 SendMessage(hFontSize, CB_INSERTSTRING, 0, (LPARAM)buf);
269 SendMessage(hFontSize, CB_SETCURSEL, 0, 0);
270 }
271 }
272
273 static void InitFontControls(HDC hDC, HWND hName, HWND hSize, HWND hDefault, HWND hCT, LPCTSTR pPropName, DWORD nPropSize, BYTE bQuality)
274 {
275 LPCTSTR pFont;
276 DWORD nSize;
277
278 if (nPropSize == 0xFFFFFFFF) {
279 pFont = DEFAULT_FONTNAME;
280 nSize = DEFAULT_FONTSIZE;
281 SendMessage(hDefault, BM_SETCHECK, BST_CHECKED, 0);
282 EnableWindow(hName, FALSE);
283 EnableWindow(hSize, FALSE);
284 EnableWindow(hCT, FALSE);
285 } else {
286 SendMessage(hDefault, BM_SETCHECK, BST_UNCHECKED, 0);
287 EnableWindow(hName, TRUE);
288 EnableWindow(hSize, TRUE);
289 EnableWindow(hCT, TRUE);
290 pFont = pPropName;
291 nSize = nPropSize;
292 }
293 SetFontName(hDC, hName, pFont);
294 SetFontSize(hSize, nSize);
295
296 if (bQuality == DEFAULT_QUALITY) {
297 SendMessage(hCT, BM_SETCHECK, BST_UNCHECKED, 0);
298 } else {
299 SendMessage(hCT, BM_SETCHECK, BST_CHECKED, 0);
300 }
301 }
302
303 static DlgMsgRes aFontRes[] = {
304 { IDC_PROPTAB_FONT_TREE_LABEL, MSG_ID_DLG_PROPTAB_FONT_TREE_LABEL },
305 { IDC_FONT_SELECT_USEDEFAULT, MSG_ID_DLG_PROPTAB_FONT_USE_DEFAULT },
306 #if defined(PLATFORM_WIN32)
307 { IDC_FONT_SELECT_CLEARTYPE, MSG_ID_DLG_PROPTAB_USE_CLEARTYPE_FONT },
308 { IDC_FONT_DETAILS_CLEARTYPE, MSG_ID_DLG_PROPTAB_USE_CLEARTYPE_FONT },
309 #else
310 { IDC_FONT_SELECT_CLEARTYPE, MSG_ID_DLG_PROPTAB_USE_CLEARTYPE_FONT_CE },
311 { IDC_FONT_DETAILS_CLEARTYPE, MSG_ID_DLG_PROPTAB_USE_CLEARTYPE_FONT_CE },
312 #endif
313 { IDC_PROPTAB_FONT_EDIT_LABEL, MSG_ID_DLG_PROPTAB_FONT_EDIT_LABEL },
314 { IDC_FONT_DETAILS_USEDEFAULT, MSG_ID_DLG_PROPTAB_FONT_USE_DEFAULT },
315 };
316
317 void FontTab::Init(HWND hDlg)
318 {
319 OverrideDlgMsg(hDlg, -1, aFontRes, sizeof(aFontRes)/sizeof(DlgMsgRes));
320
321 HWND hSelectUseDefault = GetDlgItem(hDlg, IDC_FONT_SELECT_USEDEFAULT);
322 HWND hSelectName = GetDlgItem(hDlg, IDC_FONT_SELECT_NAME);
323 HWND hSelectSize = GetDlgItem(hDlg, IDC_FONT_SELECT_SIZE);
324 HWND hSelectCT = GetDlgItem(hDlg, IDC_FONT_SELECT_CLEARTYPE);
325
326 HWND hDetailsUseDefault = GetDlgItem(hDlg, IDC_FONT_DETAILS_USEDEFAULT);
327 HWND hDetailsName = GetDlgItem(hDlg, IDC_FONT_DETAILS_NAME);
328 HWND hDetailsSize = GetDlgItem(hDlg, IDC_FONT_DETAILS_SIZE);
329 HWND hDetailsCT = GetDlgItem(hDlg, IDC_FONT_DETAILS_CLEARTYPE);
330
331 HDC hDC = GetDC(hDlg);
332
333 InitFontControls(hDC, hSelectName, hSelectSize, hSelectUseDefault, hSelectCT, pProperty->GetSelectViewFontName(), pProperty->GetSelectViewFontSize(), (BYTE)pProperty->GetSelectViewFontQuality());
334 InitFontControls(hDC, hDetailsName, hDetailsSize, hDetailsUseDefault, hDetailsCT, pProperty->GetDetailsViewFontName(), pProperty->GetDetailsViewFontSize(), (BYTE)pProperty->GetDetailsViewFontQuality());
335
336 ReleaseDC(hDlg, hDC);
337 }
338
339 static BOOL CheckNumberFormat(LPCTSTR pStr)
340 {
341 LPCTSTR p = pStr;
342 while(*p) {
343 if (!_istdigit(*p)) return FALSE;
344 p++;
345 }
346 return TRUE;
347 }
348
349 static BOOL GetFontStat(HWND hName, HWND hSize, HWND hDefault, HWND hCT, LPTSTR pName, LPDWORD pSize, LPBYTE pClearType)
350 {
351 DWORD nStat = SendMessage(hDefault, BM_GETCHECK, 0, 0);
352 if (nStat & BST_CHECKED) {
353 _tcscpy(pName, TEXT(""));
354 *pSize = 0xFFFFFFFF;
355 } else {
356 DWORD n;
357 n = SendMessage(hName, CB_GETCURSEL, 0, 0);
358 SendMessage(hName, CB_GETLBTEXT, n, (LPARAM)pName);
359
360 // get font size
361 TCHAR buf[256];
362 GetWindowText(hSize, buf, 256);
363 int is = _ttoi(buf);
364 if (!CheckNumberFormat(buf) || is <= 0) {
365 MessageBox(hSize, MSG_INVALID_FONT_SIZE, TOMBO_APP_NAME, MB_ICONWARNING|MB_OK);
366 return FALSE;
367 }
368 *pSize = (DWORD)is;
369 }
370
371 DWORD nCT = SendMessage(hCT, BM_GETCHECK, 0, 0);
372 if (nCT & BST_CHECKED) {
373 *pClearType = CLEARTYPE_QUALITY;
374 } else {
375 *pClearType = DEFAULT_QUALITY;
376 }
377 return TRUE;
378 }
379
380 BOOL FontTab::Apply(HWND hDlg)
381 {
382 HWND hSelectUseDefault = GetDlgItem(hDlg, IDC_FONT_SELECT_USEDEFAULT);
383 HWND hSelectName = GetDlgItem(hDlg, IDC_FONT_SELECT_NAME);
384 HWND hSelectSize = GetDlgItem(hDlg, IDC_FONT_SELECT_SIZE);
385 HWND hSelectCT = GetDlgItem(hDlg, IDC_FONT_SELECT_CLEARTYPE);
386
387 HWND hDetailsUseDefault = GetDlgItem(hDlg, IDC_FONT_DETAILS_USEDEFAULT);
388 HWND hDetailsName = GetDlgItem(hDlg, IDC_FONT_DETAILS_NAME);
389 HWND hDetailsSize = GetDlgItem(hDlg, IDC_FONT_DETAILS_SIZE);
390 HWND hDetailsCT = GetDlgItem(hDlg, IDC_FONT_DETAILS_CLEARTYPE);
391
392 TCHAR fontName[LF_FACESIZE];
393
394 DWORD nFS;
395 BYTE nFQ;
396 if(!GetFontStat(hSelectName, hSelectSize, hSelectUseDefault, hSelectCT, fontName, &nFS, &nFQ)) {
397 return FALSE;
398 }
399 if (!pProperty->SetSelectViewFontName(fontName)) return FALSE;
400 pProperty->SetSelectViewFontSize(nFS);
401 pProperty->SetSelectViewFontQuality(nFQ);
402
403 if (!GetFontStat(hDetailsName, hDetailsSize, hDetailsUseDefault, hDetailsCT, fontName, &nFS, &nFQ)) {
404 return FALSE;
405 }
406 if (!pProperty->SetDetailsViewFontName(fontName)) return FALSE;
407 pProperty->SetDetailsViewFontSize(nFS);
408 pProperty->SetDetailsViewFontQuality(nFQ);
409 return TRUE;
410 }
411
412 static void ToggleDefault(HWND hName, HWND hSize, HWND hDefault, HWND hCT)
413 {
414 if (SendMessage(hDefault, BM_GETCHECK, 0, 0) & BST_CHECKED) {
415 // �f�t�H���g�t�H���g
416 EnableWindow(hName, FALSE);
417 EnableWindow(hSize, FALSE);
418 EnableWindow(hCT, FALSE);
419 } else {
420 // ���[�U���`�t�H���g
421 EnableWindow(hName, TRUE);
422 EnableWindow(hSize, TRUE);
423 EnableWindow(hCT, TRUE);
424 }
425 }
426
427 BOOL FontTab::OnCommand(HWND hDlg, WPARAM wParam, LPARAM lParam)
428 {
429 HWND hSelectUseDefault = GetDlgItem(hDlg, IDC_FONT_SELECT_USEDEFAULT);
430 HWND hSelectName = GetDlgItem(hDlg, IDC_FONT_SELECT_NAME);
431 HWND hSelectSize = GetDlgItem(hDlg, IDC_FONT_SELECT_SIZE);
432 HWND hSelectCT = GetDlgItem(hDlg, IDC_FONT_SELECT_CLEARTYPE);
433 HWND hDetailsUseDefault = GetDlgItem(hDlg, IDC_FONT_DETAILS_USEDEFAULT);
434 HWND hDetailsName = GetDlgItem(hDlg, IDC_FONT_DETAILS_NAME);
435 HWND hDetailsSize = GetDlgItem(hDlg, IDC_FONT_DETAILS_SIZE);
436 HWND hDetailsCT = GetDlgItem(hDlg, IDC_FONT_DETAILS_CLEARTYPE);
437
438 switch (wParam) {
439 case IDC_FONT_SELECT_USEDEFAULT:
440 ToggleDefault(hSelectName, hSelectSize, hSelectUseDefault, hSelectCT);
441 break;
442 case IDC_FONT_DETAILS_USEDEFAULT:
443 ToggleDefault(hDetailsName, hDetailsSize, hDetailsUseDefault, hDetailsCT);
444 break;
445 }
446 return TRUE;
447 }
448
449 //////////////////////////////////////////
450 // Date format
451 //////////////////////////////////////////
452
453 static DlgMsgRes aDateRes[] = {
454 { IDC_PROPTAB_INSDATE_DATE1, MSG_ID_DLG_PROPTAB_DATE_INSDATE1 },
455 { IDC_PROPTAB_INSDATE_DATE2, MSG_ID_DLG_PROPTAB_DATE_INSDATE2 },
456 { IDC_DATEFORMAT_DESC, MSG_ID_DATEFORMAT_DESC },
457 };
458
459 void DateFormatTab::Init(HWND hDlg)
460 {
461 OverrideDlgMsg(hDlg, -1, aDateRes, sizeof(aDateRes)/sizeof(DlgMsgRes));
462
463 HWND hFormat1 = GetDlgItem(hDlg, IDC_PROP_DATEFORMAT1);
464 HWND hFormat2 = GetDlgItem(hDlg, IDC_PROP_DATEFORMAT2);
465 HWND hDesc = GetDlgItem(hDlg, IDC_DATEFORMAT_DESC);
466 SetWindowText(hFormat1, pProperty->GetDateFormat1());
467 SetWindowText(hFormat2, pProperty->GetDateFormat2());
468 DWORD nTS = 4*4;
469 SendMessage(hDesc, EM_SETTABSTOPS, 1, (LPARAM)&nTS);
470 // SetWindowText(hDesc, MSG_DATEFORMAT_DESC);
471 }
472
473 BOOL DateFormatTab::Apply(HWND hDlg)
474 {
475 HWND hFormat1 = GetDlgItem(hDlg, IDC_PROP_DATEFORMAT1);
476 HWND hFormat2 = GetDlgItem(hDlg, IDC_PROP_DATEFORMAT2);
477
478 TCHAR buf[MAX_DATEFORMAT_LEN];
479 GetWindowText(hFormat1, buf, MAX_DATEFORMAT_LEN - 1);
480 if (!pProperty->SetDateFormat1(buf)) return FALSE;
481 GetWindowText(hFormat2, buf, MAX_DATEFORMAT_LEN - 1);
482 if (!pProperty->SetDateFormat2(buf)) return FALSE;
483 return TRUE;
484 }
485
486 //////////////////////////////////////////
487 // Caret setting tab
488 //////////////////////////////////////////
489
490 static DlgMsgRes aKeepCaretRes[] = {
491 { IDC_PROP_KEEPCARET, MSG_ID_DLG_PROPTAB_KEEPCARET_KEEPCARET },
492 #if !defined(PLATFORM_BE500)
493 { IDC_PROPTAB_KEEPCARET_HELP1, MSG_ID_DLG_PROPTAB_KEEPCARET_HELP1 },
494 { IDC_PROPTAB_KEEPCARET_LABEL, MSG_ID_DLG_PROPTAB_KEEPCARET_LABEL },
495 { IDC_PROPTAB_KEEPCARET_HELP2, MSG_ID_DLG_PROPTAB_KEEPCARET_HELP2 },
496 #if !defined(PLATFORM_PSPC) && !defined(PLATFORM_HPC)
497 { IDC_PROP_SWITCHTITLE, MSG_ID_DLG_PROPTAB_KEEPCARET_SYNCTITLE },
498 { IDC_PROPTAB_KEEPCARET_HELP3, MSG_ID_DLG_PROPTAB_KEEPCARET_HELP3 },
499 #endif
500 { IDC_PROPTAB_DISABLESAVEDLG, MSG_ID_DLG_PROPTAB_DISABLESAVEDLG },
501 #endif
502 };
503
504 void KeepCaretTab::Init(HWND hDlg)
505 {
506 OverrideDlgMsg(hDlg, -1, aKeepCaretRes, sizeof(aKeepCaretRes)/sizeof(DlgMsgRes));
507
508 HWND hWnd = GetDlgItem(hDlg, IDC_PROP_KEEPCARET);
509 if (pProperty->GetKeepCaret()) {
510 SendMessage(hWnd, BM_SETCHECK, BST_CHECKED, 0);
511 } else {
512 SendMessage(hWnd, BM_SETCHECK, BST_UNCHECKED, 0);
513 }
514
515 // tab stop
516 HWND hTabWnd = GetDlgItem(hDlg, IDC_PROP_TABSTOP);
517 TCHAR buf[30];
518 wsprintf(buf, TEXT("%d"), pProperty->GetTabstop());
519 SetWindowText(hTabWnd, buf);
520
521 #if defined(PLATFORM_WIN32) || defined(PLATFORM_PKTPC) || defined(PLATFORM_WM5)
522 HWND hSwitchTitleWnd = GetDlgItem(hDlg, IDC_PROP_SWITCHTITLE);
523 if (pProperty->GetSwitchWindowTitle()) {
524 SendMessage(hSwitchTitleWnd, BM_SETCHECK, BST_CHECKED, 0);
525 } else {
526 SendMessage(hSwitchTitleWnd, BM_SETCHECK, BST_UNCHECKED, 0);
527 }
528 #endif
529
530 HWND hDisableSaveDlg = GetDlgItem(hDlg, IDC_PROPTAB_DISABLESAVEDLG);
531 if (pProperty->GetDisableSaveDlg()) {
532 SendMessage(hDisableSaveDlg, BM_SETCHECK, BST_CHECKED, 0);
533 } else {
534 SendMessage(hDisableSaveDlg, BM_SETCHECK, BST_UNCHECKED, 0);
535 }
536
537 }
538
539 BOOL KeepCaretTab::Apply(HWND hDlg)
540 {
541 HWND hWnd = GetDlgItem(hDlg, IDC_PROP_KEEPCARET);
542 if (SendMessage(hWnd, BM_GETCHECK, 0, 0) == BST_CHECKED) {
543 pProperty->SetKeepCaret(TRUE);
544 } else {
545 pProperty->SetKeepCaret(FALSE);
546 }
547
548 // tab stop
549 HWND hTabWnd = GetDlgItem(hDlg, IDC_PROP_TABSTOP);
550 TCHAR buf[30];
551 int n;
552 GetWindowText(hTabWnd, buf, 30);
553
554 n = _ttol(buf);
555 if (n < 1) {
556 SetFocus(hTabWnd);
557 return FALSE;
558 }
559 pProperty->SetTabstop(n);
560
561 #if defined(PLATFORM_WIN32) || defined(PLATFORM_PKTPC) || defined(PLATFORM_WM5)
562 HWND hSwitchWnd = GetDlgItem(hDlg, IDC_PROP_SWITCHTITLE);
563 if (SendMessage(hSwitchWnd, BM_GETCHECK, 0, 0) == BST_CHECKED) {
564 pProperty->SetSwitchWindowTitle(TRUE);
565 } else {
566 pProperty->SetSwitchWindowTitle(FALSE);
567 }
568 #endif
569
570 HWND hDisableSaveDlg = GetDlgItem(hDlg, IDC_PROPTAB_DISABLESAVEDLG);
571 if (SendMessage(hDisableSaveDlg, BM_GETCHECK, 0, 0) == BST_CHECKED) {
572 pProperty->SetDisableSaveDlg(TRUE);
573 } else {
574 pProperty->SetDisableSaveDlg(FALSE);
575 }
576
577 return TRUE;
578 }
579
580 //////////////////////////////////////////
581 // Action buttons
582 //////////////////////////////////////////
583
584 #if defined(PLATFORM_PKTPC) || defined(PLATFORM_WM5)
585 static DlgMsgRes aAppButtonRes[] = {
586 { IDC_PROP_APPBUTTON1, MSG_ID_DLG_PROPTAB_APPBTN_BUTTON1 },
587 { IDC_PROP_APPBUTTON2, MSG_ID_DLG_PROPTAB_APPBTN_BUTTON2 },
588 { IDC_PROP_APPBUTTON3, MSG_ID_DLG_PROPTAB_APPBTN_BUTTON3 },
589 { IDC_PROP_APPBUTTON4, MSG_ID_DLG_PROPTAB_APPBTN_BUTTON4 },
590 { IDC_PROP_APPBUTTON5, MSG_ID_DLG_PROPTAB_APPBTN_BUTTON5 },
591 { IDC_PROPTAB_APPBTN_HELP, MSG_ID_DLG_PROPTAB_APPBTN_HELP },
592 { IDC_PROPTAB_DISABLEACTION, MSG_ID_DLG_PROPTAB_APPBTN_DISABLE },
593 };
594
595 void AppButtonTab::Init(HWND hDlg)
596 {
597 OverrideDlgMsg(hDlg, -1, aAppButtonRes, sizeof(aAppButtonRes)/sizeof(DlgMsgRes));
598
599 HWND hAppButton1 = GetDlgItem(hDlg, IDC_PROP_APPBUTTON1);
600 HWND hAppButton2 = GetDlgItem(hDlg, IDC_PROP_APPBUTTON2);
601 HWND hAppButton3 = GetDlgItem(hDlg, IDC_PROP_APPBUTTON3);
602 HWND hAppButton4 = GetDlgItem(hDlg, IDC_PROP_APPBUTTON4);
603 HWND hAppButton5 = GetDlgItem(hDlg, IDC_PROP_APPBUTTON5);
604
605 HWND hDisableAppButton = GetDlgItem(hDlg, IDC_PROPTAB_DISABLEACTION);
606
607 if (pProperty->GetAppButton1()) {
608 SendMessage(hAppButton1, BM_SETCHECK, BST_CHECKED, 0);
609 } else {
610 SendMessage(hAppButton1, BM_SETCHECK, BST_UNCHECKED, 0);
611 }
612 if (pProperty->GetAppButton2()) {
613 SendMessage(hAppButton2, BM_SETCHECK, BST_CHECKED, 0);
614 } else {
615 SendMessage(hAppButton2, BM_SETCHECK, BST_UNCHECKED, 0);
616 }
617 if (pProperty->GetAppButton3()) {
618 SendMessage(hAppButton3, BM_SETCHECK, BST_CHECKED, 0);
619 } else {
620 SendMessage(hAppButton3, BM_SETCHECK, BST_UNCHECKED, 0);
621 }
622 if (pProperty->GetAppButton4()) {
623 SendMessage(hAppButton4, BM_SETCHECK, BST_CHECKED, 0);
624 } else {
625 SendMessage(hAppButton4, BM_SETCHECK, BST_UNCHECKED, 0);
626 }
627 if (pProperty->GetAppButton5()) {
628 SendMessage(hAppButton5, BM_SETCHECK, BST_CHECKED, 0);
629 } else {
630 SendMessage(hAppButton5, BM_SETCHECK, BST_UNCHECKED, 0);
631 }
632
633 if (pProperty->GetDisableExtraActionButton()) {
634 SendMessage(hDisableAppButton, BM_SETCHECK, BST_CHECKED, 0);
635 } else {
636 SendMessage(hDisableAppButton, BM_SETCHECK, BST_UNCHECKED, 0);
637 }
638 }
639
640 BOOL AppButtonTab::Apply(HWND hDlg)
641 {
642 HWND hAppButton1 = GetDlgItem(hDlg, IDC_PROP_APPBUTTON1);
643 HWND hAppButton2 = GetDlgItem(hDlg, IDC_PROP_APPBUTTON2);
644 HWND hAppButton3 = GetDlgItem(hDlg, IDC_PROP_APPBUTTON3);
645 HWND hAppButton4 = GetDlgItem(hDlg, IDC_PROP_APPBUTTON4);
646 HWND hAppButton5 = GetDlgItem(hDlg, IDC_PROP_APPBUTTON5);
647 HWND hDisableAppButton = GetDlgItem(hDlg, IDC_PROPTAB_DISABLEACTION);
648
649 if (SendMessage(hAppButton1, BM_GETCHECK, 0, 0) == BST_CHECKED) {
650 pProperty->SetAppButton1(APPBUTTON_ACTION_ENABLE);
651 } else {
652 pProperty->SetAppButton1(APPBUTTON_ACTION_DISABLE);
653 }
654 if (SendMessage(hAppButton2, BM_GETCHECK, 0, 0) == BST_CHECKED) {
655 pProperty->SetAppButton2(APPBUTTON_ACTION_ENABLE);
656 } else {
657 pProperty->SetAppButton2(APPBUTTON_ACTION_DISABLE);
658 }
659 if (SendMessage(hAppButton3, BM_GETCHECK, 0, 0) == BST_CHECKED) {
660 pProperty->SetAppButton3(APPBUTTON_ACTION_ENABLE);
661 } else {
662 pProperty->SetAppButton3(APPBUTTON_ACTION_DISABLE);
663 }
664 if (SendMessage(hAppButton4, BM_GETCHECK, 0, 0) == BST_CHECKED) {
665 pProperty->SetAppButton4(APPBUTTON_ACTION_ENABLE);
666 } else {
667 pProperty->SetAppButton4(APPBUTTON_ACTION_DISABLE);
668 }
669 if (SendMessage(hAppButton5, BM_GETCHECK, 0, 0) == BST_CHECKED) {
670 pProperty->SetAppButton5(APPBUTTON_ACTION_ENABLE);
671 } else {
672 pProperty->SetAppButton5(APPBUTTON_ACTION_DISABLE);
673 }
674
675 if (SendMessage(hDisableAppButton, BM_GETCHECK, 0, 0) == BST_CHECKED) {
676 pProperty->SetDisableExtraActionButton(TRUE);
677 } else {
678 pProperty->SetDisableExtraActionButton(FALSE);
679 }
680
681 return TRUE;
682 }
683
684 #endif
685
686 //////////////////////////////////////////
687 // SIP tab
688 //////////////////////////////////////////
689
690 #if defined(PLATFORM_PKTPC) || defined(PLATFORM_WM5)
691 static DlgMsgRes aSIPRes[] = {
692 { IDC_PROP_SIPDELTA, MSG_ID_DLG_PROPTAB_SIP_SHIFT },
693 };
694
695 void SipTab::Init(HWND hDlg)
696 {
697 OverrideDlgMsg(hDlg, -1, aSIPRes, sizeof(aSIPRes)/sizeof(DlgMsgRes));
698
699 HWND hKeepDelta = GetDlgItem(hDlg, IDC_PROP_SIPDELTA);
700 if (pProperty->GetSipSizeDelta() != 0) {
701 SendMessage(hKeepDelta, BM_SETCHECK, BST_CHECKED, 0);
702 } else {
703 SendMessage(hKeepDelta, BM_SETCHECK, BST_UNCHECKED, 0);
704 }
705 }
706
707 BOOL SipTab::Apply(HWND hDlg)
708 {
709 HWND hKeepDelta = GetDlgItem(hDlg, IDC_PROP_SIPDELTA);
710 if (SendMessage(hKeepDelta, BM_GETCHECK, 0, 0) == BST_CHECKED) {
711 pProperty->SetSipSizeDelta(SIP_DELTA);
712 } else {
713 pProperty->SetSipSizeDelta(0);
714 }
715 return TRUE;
716 }
717
718 #endif
719
720 //////////////////////////////////////////
721 // Codepage tab
722 //////////////////////////////////////////
723
724 static DlgMsgRes aCPRes[] = {
725 { IDC_PROPTAB_CODEPAGE_LABEL, MSG_ID_DLG_PROPTAB_CODEPAGE_LABEL },
726 { IDC_PROPTAB_CODEPAGE_NOTICE, MSG_ID_DLG_PROPTAB_CODEPAGE_NOTICE },
727 };
728
729 void CodepageTab::Init(HWND hDlg)
730 {
731 OverrideDlgMsg(hDlg, -1, aCPRes, sizeof(aCPRes)/sizeof(DlgMsgRes));
732
733 HWND hWnd = GetDlgItem(hDlg, IDC_PROPTAB_CODEPAGE_CODEPAGE);
734 SendMessage(hWnd, CB_ADDSTRING, 0, (LPARAM)MSG_CODEPAGE_DEFAULT);
735 SendMessage(hWnd, CB_ADDSTRING, 0, (LPARAM)MSG_CODEPAGE_UTF16);
736 SendMessage(hWnd, CB_ADDSTRING, 0, (LPARAM)MSG_CODEPAGE_UTF8);
737 SendMessage(hWnd, CB_ADDSTRING, 0, (LPARAM)MSG_CODEPAGE_GREEK);
738 switch (pProperty->GetCodePage()) {
739 case TOMBO_CP_UTF16LE:
740 SendMessage(hWnd, CB_SETCURSEL, 1, 0);
741 break;
742 case TOMBO_CP_UTF8:
743 SendMessage(hWnd, CB_SETCURSEL, 2, 0);
744 break;
745 case TOMBO_CP_GREEK:
746 SendMessage(hWnd, CB_SETCURSEL, 3, 0);
747 break;
748 default:
749 SendMessage(hWnd, CB_SETCURSEL, 0, 0);
750 }
751 }
752
753 BOOL CodepageTab::Apply(HWND hDlg)
754 {
755 HWND hWnd = GetDlgItem(hDlg, IDC_PROPTAB_CODEPAGE_CODEPAGE);
756 switch (SendMessage(hWnd, CB_GETCURSEL, 0, 0)) {
757 case 0: // default
758 pProperty->SetCodePage(TOMBO_CP_DEFAULT);
759 break;
760 case 1: // UTF16
761 pProperty->SetCodePage(TOMBO_CP_UTF16LE);
762 break;
763 case 2: // UTF8
764 pProperty->SetCodePage(TOMBO_CP_UTF8);
765 break;
766 case 3: // Greek
767 pProperty->SetCodePage(TOMBO_CP_GREEK);
768 break;
769 }
770 return TRUE;
771 }
772
773 //////////////////////////////////////////
774 // DefaultNote tab
775 //////////////////////////////////////////
776
777 static DlgMsgRes aDefNote[] = {
778 { IDC_PROPTAB_DEFNOTE_LABEL, MSG_ID_DLG_PROPTAB_DEFNOTE_LABEL },
779 { IDC_PROPTAB_DEFNOTE_SETCURRENT, MSG_ID_DLG_PROPTAB_DEFNOTE_CURRENT },
780 { IDC_PROPTAB_DEFNOTE_SETBLANK, MSG_ID_DLG_PROPTAB_BLANK },
781 { IDC_PROPTAB_DEFNOTE_USELAST, MSG_ID_DLG_PROPTAB_DEFNOTE_LAST_USE },
782 };
783
784 void DefaultNoteTab::Init(HWND hDlg)
785 {
786 OverrideDlgMsg(hDlg, -1, aDefNote, sizeof(aDefNote)/sizeof(DlgMsgRes));
787 HWND hLastOpen = GetDlgItem(hDlg, IDC_PROPTAB_DEFNOTE_USELAST);
788 SetCheckBox(hLastOpen, g_Property.GetKeepLastOpen());
789
790 HWND hPath = GetDlgItem(hDlg, IDC_PROPTAB_DEFNOTE_PATH);
791 SetWindowText(hPath, g_Property.GetDefaultNote());
792
793 HWND hButton1 = GetDlgItem(hDlg, IDC_PROPTAB_DEFNOTE_SETCURRENT);
794 HWND hButton2 = GetDlgItem(hDlg, IDC_PROPTAB_DEFNOTE_SETBLANK);
795 BOOL bEnable = !g_Property.GetKeepLastOpen();
796 EnableWindow(hPath, bEnable);
797 EnableWindow(hButton1, bEnable);
798 EnableWindow(hButton2, bEnable);
799 }
800
801 BOOL DefaultNoteTab::Apply(HWND hDlg)
802 {
803 HWND hPath = GetDlgItem(hDlg, IDC_PROPTAB_DEFNOTE_PATH);
804 TCHAR buf[MAX_PATH];
805 GetWindowText(hPath, buf, MAX_PATH);
806 g_Property.SetKeepLastOpen(GetCheckBox(GetDlgItem(hDlg, IDC_PROPTAB_DEFNOTE_USELAST)));
807 return g_Property.SetDefaultNote(buf);
808 }
809
810 BOOL DefaultNoteTab::OnCommand(HWND hDlg, WPARAM wParam, LPARAM lParam)
811 {
812 switch(LOWORD(wParam)) {
813 case IDC_PROPTAB_DEFNOTE_SETCURRENT:
814 SetCurrent(hDlg);
815 break;
816 case IDC_PROPTAB_DEFNOTE_SETBLANK:
817 SetBlank(hDlg);
818 break;
819 case IDC_PROPTAB_DEFNOTE_USELAST:
820 {
821 HWND hPath = GetDlgItem(hDlg, IDC_PROPTAB_DEFNOTE_PATH);
822 HWND hButton1 = GetDlgItem(hDlg, IDC_PROPTAB_DEFNOTE_SETCURRENT);
823 HWND hButton2 = GetDlgItem(hDlg, IDC_PROPTAB_DEFNOTE_SETBLANK);
824 DWORD bEnable = !GetCheckBox(GetDlgItem(hDlg, IDC_PROPTAB_DEFNOTE_USELAST));
825 EnableWindow(hPath, bEnable);
826 EnableWindow(hButton1, bEnable);
827 EnableWindow(hButton2, bEnable);
828 }
829 break;
830 }
831 return TRUE;
832 }
833
834 void DefaultNoteTab::SetBlank(HWND hDlg)
835 {
836 HWND hPath = GetDlgItem(hDlg, IDC_PROPTAB_DEFNOTE_PATH);
837 SetWindowText(hPath, TEXT(""));
838 }
839
840 void DefaultNoteTab::SetCurrent(HWND hDlg)
841 {
842 HWND hPath = GetDlgItem(hDlg, IDC_PROPTAB_DEFNOTE_PATH);
843 if (pCurrentPath) {
844 SetWindowText(hPath, pCurrentPath);
845 } else {
846 SetWindowText(hPath, TEXT(""));
847 }
848 }
849
850 //////////////////////////////////////////
851 // External application tab
852 //////////////////////////////////////////
853
854 #if !defined(PLATFORM_PSPC)
855 static DlgMsgRes aExtApp[] = {
856 { IDC_PROP_EXTAPP_USEASSOC, MSG_ID_DLG_EXTAPP_USEASSOC },
857 { IDC_PROP_EXTAPP_TTL_EXTAPP1, MSG_ID_DLG_EXTAPP_LBL_APP1 },
858 { IDC_PROP_EXTAPP_TTL_EXTAPP2, MSG_ID_DLG_EXTAPP_LBL_APP2 },
859 { IDC_PROP_EXTAPP_CAUTION, MSG_ID_DLG_EXTAPP_CAUTION },
860 };
861
862 void ExtAppTab::Init(HWND hDlg)
863 {
864 OverrideDlgMsg(hDlg, -1, aExtApp, sizeof(aExtApp)/sizeof(DlgMsgRes));
865
866 HWND hUseAssoc = GetDlgItem(hDlg, IDC_PROP_EXTAPP_USEASSOC);
867 if (pProperty->GetUseAssociation()) {
868 SendMessage(hUseAssoc, BM_SETCHECK, BST_CHECKED, 0);
869 } else {
870 SendMessage(hUseAssoc, BM_SETCHECK, BST_UNCHECKED, 0);
871 }
872
873 SetWindowText(GetDlgItem(hDlg, IDC_PROP_EXTAPP_PATH_EXTAPP1), pProperty->GetExtApp1());
874 SetWindowText(GetDlgItem(hDlg, IDC_PROP_EXTAPP_PATH_EXTAPP2), pProperty->GetExtApp2());
875 }
876
877 BOOL ExtAppTab::Apply(HWND hDlg)
878 {
879 HWND hWnd = GetDlgItem(hDlg, IDC_PROP_EXTAPP_USEASSOC);
880 if (SendMessage(hWnd, BM_GETCHECK, 0, 0) == BST_CHECKED) {
881 pProperty->SetUseAssociation(TRUE);
882 } else {
883 pProperty->SetUseAssociation(FALSE);
884 }
885 HWND hAp1 = GetDlgItem(hDlg, IDC_PROP_EXTAPP_PATH_EXTAPP1);
886 HWND hAp2 = GetDlgItem(hDlg, IDC_PROP_EXTAPP_PATH_EXTAPP2);
887 DWORD n1 = GetWindowTextLength(hAp1);
888 DWORD n2 = GetWindowTextLength(hAp2);
889 DWORD n = (n1 > n2 ? n1 : n2) + 1;
890 TString s;
891 if (!s.Alloc(n)) return FALSE;
892 GetWindowText(hAp1, s.Get(), n);
893 if (!pProperty->SetExtApp1(s.Get())) return FALSE;
894 GetWindowText(hAp2, s.Get(), n);
895 if (!pProperty->SetExtApp2(s.Get())) return FALSE;
896 return TRUE;
897 }
898
899 BOOL ExtAppTab::OnCommand(HWND hDlg, WPARAM wParam, LPARAM lParam)
900 {
901 switch(LOWORD(wParam)) {
902 case IDC_PROPTAB_EXTAPP_CHOOSE1:
903 Choose1(hDlg);
904 break;
905 case IDC_PROPTAB_EXTAPP_CHOOSE2:
906 Choose2(hDlg);
907 break;
908 }
909 return TRUE;
910 }
911
912 void ExtAppTab::Choose1(HWND hDlg)
913 {
914 FileSelector sel;
915 #if defined(PLATFORM_WIN32)
916 LPCTSTR pExt = MSG_DLG_EXTAPP_CHOOSE_EXT;
917 #else
918 LPCTSTR pExt = TEXT("*.exe");
919 #endif
920 if (sel.Popup(g_hInstance, hDlg, MSG_DLG_EXTAPP_CHOOSE_TTL, pExt) == IDOK) {
921 HWND hWnd = GetDlgItem(hDlg, IDC_PROP_EXTAPP_PATH_EXTAPP1);
922 SetWindowText(hWnd, sel.SelectedPath());
923 }
924 }
925
926 void ExtAppTab::Choose2(HWND hDlg)
927 {
928 FileSelector sel;
929 #if defined(PLATFORM_WIN32)
930 LPCTSTR pExt = MSG_DLG_EXTAPP_CHOOSE_EXT;
931 #else
932 LPCTSTR pExt = TEXT("*.exe");
933 #endif
934
935 if (sel.Popup(g_hInstance, hDlg, MSG_DLG_EXTAPP_CHOOSE_TTL, pExt) == IDOK) {
936 HWND hWnd = GetDlgItem(hDlg, IDC_PROP_EXTAPP_PATH_EXTAPP2);
937 SetWindowText(hWnd, sel.SelectedPath());
938 }
939 }
940 #endif
941
942 //////////////////////////////////////////
943 // helper functions
944 //////////////////////////////////////////
945
946 // set font name to combobox
947 //
948 // callback handler called from EnumFontFamilies
949 // set window handle to LPARAM
950
951 int CALLBACK PropEnumFonts(ENUMLOGFONT FAR *pFont, NEWTEXTMETRIC FAR *pMetric, int iFontType, LPARAM lParam)
952 {
953 HWND hWnd = (HWND)lParam;
954
955 LPTSTR pFace = pFont->elfLogFont.lfFaceName;
956 if (*pFace == TEXT('@')) return TRUE; // disable font for vertical
957 // if (pMetric->tmPitchAndFamily & 0x1) return TRUE;
958
959 SendMessage(hWnd, CB_ADDSTRING, 0, (LPARAM)pFace);
960 return TRUE;
961 }
962
963 // create directory only if it not exists
964 static BOOL CheckCreateDir(LPCTSTR pDir)
965 {
966 WIN32_FIND_DATA wfd;
967 HANDLE h = FindFirstFile(pDir, &wfd);
968 if (h == INVALID_HANDLE_VALUE) {
969 return CreateDirectory(pDir, NULL);
970 }
971 FindClose(h);
972 if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
973 return TRUE;
974 } else {
975 SetLastError(ERROR_FILE_EXISTS);
976 return FALSE;
977 }
978 }
979
980 // create directory recursively
981 static BOOL CreateDirectories(LPCTSTR pDir)
982 {
983 LPCTSTR p = pDir;
984 TCHAR aPath[MAX_PATH];
985 LPTSTR q = aPath;
986
987 #if defined(PLATFORM_WIN32)
988 if (isalpha(*p) && *(p+1) == ':' && *(p+2) == '\\') {
989 // D:\Path
990 *q++ = *p++;
991 *q++ = *p++;
992 *q++ = *p++;
993 } else if (*p == '\\' && *(p+1) == '\\') {
994 // \\server\share\Path
995 *q++ = *p++;
996 *q++ = *p++;
997
998 // server\
999 while(*p) {
1000 if (*p == '\\') {
1001 *q++ = *p++;
1002 break;
1003 }
1004 if (IsDBCSLeadByte(*p)) {
1005 *q++ = *p++;
1006 }
1007 *q++ = *p++;
1008 }
1009 // share\
1010 while(*p) {
1011 if (*p == '\\') {
1012 *q++ = *p++;
1013 break;
1014 }
1015 if (IsDBCSLeadByte(*p)) {
1016 *q++ = *p++;
1017 }
1018 *q++ = *p++;
1019 }
1020 } else {
1021 return FALSE;
1022 }
1023 #else
1024 // \\
1025 if (*p != TEXT('\\')) {
1026 return FALSE;
1027 }
1028 *q++ = *p++;
1029 #endif
1030
1031 while(*p) {
1032 if (*p == TEXT('\\')) {
1033 *q = TEXT('\0');
1034 if (!CheckCreateDir(aPath)) return FALSE;
1035 }
1036 *q++ = *p++;
1037 }
1038 *q = TEXT('\0');
1039 return CheckCreateDir(aPath);
1040 }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26